Cordova文件传输删除多部分或内容处置头

Cordova文件传输删除多部分或内容处置头,cordova,multipartform-data,file-transfer,content-disposition,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, fai

我设法使用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);
};

我花了一段时间才明白这一点,但这是我删除多部分标题的方式。以下是解决方案/解决方法

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

寻找:

sendStream.write(beforeDataBytes);
totalBytes += beforeDataBytes.length;
注释掉或删除这两行。它们是添加多部分头的代码

同时删除:

sendStream.write(tailParamsBytes);
totalBytes += tailParamsBytes.length;
这段代码为multipart头添加了一个尾部


我已经做了MD5校验和检查,它们现在是相同的。

请在选项中添加标题

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

只需参考GitHub中的内容即可。

只需在标题中添加“内容类型”

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


基于源代码:

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

我根本不想要任何多部分表单数据或任何内容类型值。我查看了FileTransfer.java中的代码,它似乎没有任何选项可以完全关闭。虽然不是很优雅,但是一个简单的4行注释就可以了,不需要对我的Web服务做任何更改。
options.headers = {"Content-Type":"dummy"}; // set it to something to avoid the plug-in append the header