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);
                }

Reply via email to