This is an automated email from the ASF dual-hosted git repository. aharui pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push: new aa7a65c got something to work for me with FileReference aa7a65c is described below commit aa7a65cb622977d3da4ec6a00f8cbaf8f7f284dc Author: Alex Harui <aha...@apache.org> AuthorDate: Sun Mar 29 22:07:26 2020 -0700 got something to work for me with FileReference --- .../src/main/royale/mx/net/FileReference.as | 2 + .../mx/net/beads/FileUploaderUsingFormData.as | 157 +++++++++++++++++++++ 2 files changed, 159 insertions(+) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/net/FileReference.as b/frameworks/projects/MXRoyale/src/main/royale/mx/net/FileReference.as index 5108fa7..080d46d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/net/FileReference.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/net/FileReference.as @@ -29,6 +29,7 @@ package mx.net import org.apache.royale.events.Event; import org.apache.royale.net.URLRequest; import org.apache.royale.file.beads.FileUploader; + import mx.net.beads.FileUploaderUsingFormData; public class FileReference extends FileProxy { @@ -43,6 +44,7 @@ package mx.net _model = new FileModel(); _browser = new FileBrowserWithFilter(); _uploader = new FileLoaderAndUploader(); + addBead(new FileUploaderUsingFormData()); addBead(_model); addBead(_browser); addBead(_uploader); diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as new file mode 100644 index 0000000..a0d5617 --- /dev/null +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as @@ -0,0 +1,157 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.net.beads +{ +import org.apache.royale.events.DetailEvent; +import org.apache.royale.file.beads.FileUploader; +import org.apache.royale.file.IFileModel; + +/** + * This class does uploads using FormData in JS + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + * + * @royalesuppresspublicvarwarning + */ +public class FileUploaderUsingFormData extends FileUploader +{ + /** + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function FileUploaderUsingFormData() + { + super(); + } + + COMPILE::JS + private var xhr:XMLHttpRequest; + + /** + * Indicates the status of the request. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.7.0 + */ + public var requestStatus:int = 0; + + override public function upload(url:String):void + { + COMPILE::JS + { + requestStatus = 0; + xhr = new XMLHttpRequest(); + xhr.open("POST", url); + xhr.addEventListener("readystatechange", xhr_onreadystatechange,false); + xhr.addEventListener("progress", xhr_progress, false); + + var formData:FormData = new FormData(); + formData.append("Filename", (host.model as IFileModel).name); + formData.append("Filedata", (host.model as IFileModel).fileReference); + xhr.send(formData); + } + } + + /** + * Download is progressing (JS only). + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.7.0 + */ + COMPILE::JS + private function xhr_progress(error:Object):void + { + /* + var progEv:ProgressEvent = new ProgressEvent(ProgressEvent.PROGRESS); + progEv.current = bytesLoaded = error.loaded; + progEv.total = bytesTotal = error.total; + + dispatchEvent(progEv); + if(onProgress) + onProgress(this); + */ + } + + /** + * HTTP status change (JS only). + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.7.0 + */ + COMPILE::JS + private function xhr_onreadystatechange(error:*):void + { + setStatus(xhr.status); + //we only need to deal with the status when it's done. + if(xhr.readyState != 4) + return; + if(xhr.status == 0) + { + //Error. We don't know if there's a network error or a CORS error so there's no detail + host.dispatchEvent(new DetailEvent("communicationError")); + } + else if(xhr.status < 200) + { + host.dispatchEvent(new DetailEvent("communicationError",false,false,""+requestStatus)); + } + else if(xhr.status < 300) + { + host.dispatchEvent(new org.apache.royale.events.Event("complete")); + } + else + { + host.dispatchEvent(new DetailEvent("communicationError",false,false,""+requestStatus)); + } + } + + /** + * Set the HTTP request status. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.7.0 + */ + COMPILE::JS + private function setStatus(value:int):void + { + if(value != requestStatus) + { + requestStatus = value; + host.dispatchEvent(new DetailEvent("httpStatus",false,false,""+value)); + } + } + + +} + + +} \ No newline at end of file