[ https://issues.apache.org/jira/browse/CB-12257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Stanford resolved CB-12257. ----------------------------------- Resolution: Not A Problem Used the FileTransfer plugin instead. > xhr.send fails on Cordova File object - maybe because it's not an instanceof > Blob? > ---------------------------------------------------------------------------------- > > Key: CB-12257 > URL: https://issues.apache.org/jira/browse/CB-12257 > Project: Apache Cordova > Issue Type: Bug > Components: Plugin File > Affects Versions: 4.3.1 > Environment: Cordova iOS, Android. > Reporter: Michael Stanford > > Versions: > Cordova: 6.4.0 > Cordova File System Plugin: 4.3.1 > iOS: 10.0.2 > Cordova iOS: 4.3.1 > Android: 6.0.1 > Cordova Android: 6.0.0 > Desktop OS: OS X 10.12.1 > Desktop Safari: 10.0.1 > AWS S3 SDK is documented at: > http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3/ManagedUpload.html > On both Android and iOS, using the Cordova File System plugin, and in OS X > Safari using the File Input HTML tag, my test app successfully retrieves a > File object in every case from the local file system. > In each of the three cases, the app invokes the Amazon S3 Javascript API > upload method with this File object. In desktop Safari the file uploads > correctly and appears in the S3 bucket correctly. > In the Cordova apps, both iOS and Android, the file seems to upload correctly > (no errors), but the resulting (correctly named) file in the bucket contains > only the 15-byte text string "\[object Object\]". > The app uses the same HTML and JS source files in all three cases; after > creating the File object the code is identical, and because they run from the > same HTML page, the meta information is also the same. > Because the S3 API upload method supports multipart uploads, it invokes the > File.slice method on the File before passing it to xhr.send. In the desktop > Safari implementation of the File object, the slice method returns a Blob > object. In the Cordova implementation (as documented in the source code at > line 47 of File.js) it returns another File object. > Tracing through to the xhr.send function in the S3 API, the desktop version > delivers a Blob as the argument to xhr.send(), and the file is uploaded > correctly. The Cordova versions deliver a File as the argument to xhr.send(), > and the uploads fail. > Although the File object in desktop Safari is an instanceof Blob, the Cordova > File object is not an instanceof Blob, which might explain why xhr.send can't > cope with it. > {code} > > params.Body instanceof File > < true > > params.Body instanceof Blob > < true > {code} > {code} > > params.Body instanceof File > < true > > params.Body instanceof Blob > < false > {code} > The documentation here > (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send) > indicates that xhr.send can handle a Blob, but doesn't mention a File. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org