Cordova File Transfer remove Multipart or Content-Disposition Header

蹲街弑〆低调 提交于 2019-11-28 10:49:16

问题


I managed to upload an image to my server using Cordova File Transfer plugin.

var img = <full path to image>
var url = <url to webservice>

var options = new FileUploadOptions(); //no specified options, using defaults
var ft = new FileTransfer();
ft.upload(img, encodeURI(url), win, fail, options);

var win = function (r) {
    console.log('Successfully sent');
}
var fail = function (error) {
    console.log("An error has occurred: Code = " + error.code);
};

However, my server had problems reading the image due to the extra header added by the plugin.

--+++++..Content-Disposition: form-data; name="file"; filename="filename.jpg"..Content-Type: image/jpeg....

回答1:


Took me awhile to figure this but this is the way I removed the Multipart Header. Here's the solution/work around.

Open: \platforms\android\src\org\apache\cordova\filetransfer\FileTransfer.java

Look for:

sendStream.write(beforeDataBytes);
totalBytes += beforeDataBytes.length;

Comment away or delete these 2 lines. They are the code that adds the multipart header.

Also remove:

sendStream.write(tailParamsBytes);
totalBytes += tailParamsBytes.length;

This code adds a tail for the multipart header.

I have done a MD5 checksum check and they are of the same now.




回答2:


Please add headers to options

var headers={'headerParam':'headerValue'};
options.headers = headers;

Just refer the example from GitHub.




回答3:


Just put a 'Content-Type' in Headers.

headers: A map of header name/header values. Use an array to specify more than one value. On iOS, FireOS, and Android, if a header named Content-Type is present, multipart form data will NOT be used. (Object)

https://github.com/apache/cordova-plugin-file-transfer#example-with-upload-headers-and-progress-events-android-and-ios-only




回答4:


Based on the source code:

boolean multipartFormUpload = (headers == null) || !headers.has("Content-Type");
if (multipartFormUpload) {
  conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
}

You can find it is easy to disable the multipart header by setting a dummy header option in your javascript:

options.headers = {"Content-Type":"dummy"}; // set it to something to avoid the plug-in append the header


来源:https://stackoverflow.com/questions/31175836/cordova-file-transfer-remove-multipart-or-content-disposition-header

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!