This is an automated email from the ASF dual-hosted git repository. yishayw pushed a commit to branch file_upload in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit ab7ac3c5499bb10deeade0c98582522f1cc45f64 Author: yweiss <[email protected]> AuthorDate: Sun May 29 06:49:55 2022 -0700 Fixes made by Greg to achieve feature parity with flash implementation --- .../src/main/royale/mx/net/FileReference.as | 2 ++ .../mx/net/beads/FileUploaderUsingFormData.as | 21 +++++++++++++++++++-- .../royale/file/beads/FileLoaderAndUploader.as | 19 ++++++++++++++++++- .../org/apache/royale/file/beads/FileUploader.as | 14 ++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as index d934a13b02..6221004af0 100644 --- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as +++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as @@ -114,6 +114,8 @@ package mx.net public function upload(request:URLRequest, uploadDataFieldName:String = "Filedata", testUpload:Boolean = false):void { + _uploader.referenceRequest = request; + _uploader.uploadDataFieldName = uploadDataFieldName; _uploader.upload(request.url); } diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as index d95bb9fdad..39b40b5060 100644 --- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as +++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as @@ -24,6 +24,8 @@ import org.apache.royale.file.beads.FileUploader; import org.apache.royale.file.IFileModel; import mx.events.DataEvent; +import org.apache.royale.net.URLRequestHeader; + /** * This class does uploads using FormData in JS * @@ -69,10 +71,25 @@ public class FileUploaderUsingFormData extends FileUploader xhr.open("POST", url); xhr.addEventListener("readystatechange", xhr_onreadystatechange,false); xhr.addEventListener("progress", xhr_progress, false); + + if (_referenceRequest) { + var contentType:String; + for (var i:int = 0; i < _referenceRequest.requestHeaders.length; i++) + { + var header:URLRequestHeader = _referenceRequest.requestHeaders[i]; + if (header.name.toLowerCase() == "content-type") + { + contentType = header.value; + continue;//ignore the contentType, it will be set to multipart by using FormData below + } + xhr.setRequestHeader(header.name, header.value); + } + } + var dataFieldName:String = _uploadDataFieldName; var formData:FormData = new FormData(); - formData.append("Filename", (host.model as IFileModel).name); - formData.append("Filedata", (host.model as IFileModel).fileReference); + formData.append("filename", (host.model as IFileModel).name); //this should *not* be 'Filename' , it should be 'filename' (from flash as3 docs) + formData.append(dataFieldName, (host.model as IFileModel).fileReference); xhr.send(formData); } } diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as index 7aa66a6e3c..6e2269f128 100644 --- a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as +++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as @@ -22,8 +22,9 @@ package org.apache.royale.file.beads import org.apache.royale.events.Event; import org.apache.royale.file.FileProxy; import org.apache.royale.file.IFileModel; +import org.apache.royale.net.URLRequest; - /** +/** * The FileLoaderAndUploader is a compound bead that allows you * to load a file and upload it in one operation. * @@ -69,6 +70,18 @@ package org.apache.royale.file.beads value.addBead(_uploader); } } + + + + private var _referenceRequest:URLRequest = null; + public function set referenceRequest(value:URLRequest):void{ + _referenceRequest = value; + } + + private var _uploadDataFieldName:String = "Filedata"; + public function set uploadDataFieldName(value:String):void{ + _uploadDataFieldName = value; + } /** * Upload a file to the specified url. If file hasn't been loaded already it will be. @@ -89,6 +102,8 @@ package org.apache.royale.file.beads _loader.load(); } else { + _uploader.referenceRequest = _referenceRequest; + _uploader.uploadDataFieldName = _uploadDataFieldName; _uploader.upload(url); } } @@ -104,6 +119,8 @@ package org.apache.royale.file.beads private function blobChangedHandler(e:Event):void { (_strand as FileProxy).model.removeEventListener('blobChanged', blobChangedHandler); + _uploader.referenceRequest = _referenceRequest; + _uploader.uploadDataFieldName = _uploadDataFieldName; _uploader.upload(_url); } diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as index c081dc4d67..6c4089ed13 100644 --- a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as +++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as @@ -63,6 +63,16 @@ package org.apache.royale.file.beads { private var _strand:IStrand; private var _contentType:String; + + protected var _referenceRequest:URLRequest; + public function set referenceRequest(value:URLRequest):void{ + _referenceRequest = value; + } + + protected var _uploadDataFieldName:String = "Filedata"; + public function set uploadDataFieldName(value:String):void{ + _uploadDataFieldName = value; + } /** * Upload a file to the specified url. @@ -87,6 +97,10 @@ package org.apache.royale.file.beads req.method = "POST"; req.data = (host.model as IFileModel).blob; req.url = url; + if (_referenceRequest) { + req.requestHeaders = _referenceRequest.requestHeaders; + } + binaryUploader.addEventListener(Event.COMPLETE, completeHandler); binaryUploader.load(req); }
