[ 
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

Reply via email to