Cordova文件传输删除Multipart或Content-Disposition标题

时间:2015-07-02 04:53:07

标签: cordova multipartform-data file-transfer content-disposition

我设法使用Cordova文件传输插件将图像上传到我的服务器。

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

但是,由于插件添加了额外的标题,我的服务器在读取图像时遇到了问题。

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

4 个答案:

答案 0 :(得分:1)

我花了一些时间来解决这个问题,但这是我删除Multipart Header的方式。这是解决方案/解决方法。

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

寻找:

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

注释或删除这两行。它们是添加multipart标头的代码。

同样删除:

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

此代码为multipart标头添加尾部。

我已经完成了MD5校验和检查,现在它们是一样的。

答案 1 :(得分:0)

请将标题添加到选项

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

只需参考GitHub中的example

答案 2 :(得分:0)

只需输入内容类型&#39;在标题中。

  

标题:标题名称/标题值的映射。使用数组指定多个值。在iOS,FireOS和Android上,如果存在名为Content-Type的标题,则不会使用多部分表单数据。 (对象)

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

答案 3 :(得分:0)

基于源代码:

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

您可以通过在javascript中设置虚拟标题选项来轻松禁用多部分标题:

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