Cordova 文件传输删除多部分或 Content-Disposition Header
Cordova File Transfer remove Multipart or Content-Disposition Header
我成功地使用 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);
};
但是,由于插件添加了额外的 header,我的服务器无法读取图像。
--+++++..Content-Disposition: form-data; name="file"; filename="filename.jpg"..Content-Type: image/jpeg....
我花了一段时间才弄清楚这一点,但这是我删除 Multipart Header 的方式。这是 solution/work 左右。
打开:\platforms\android\src\org\apache\cordova\filetransfer\FileTransfer.java
寻找:
sendStream.write(beforeDataBytes);
totalBytes += beforeDataBytes.length;
评论或删除这两行。它们是添加多部分 header.
的代码
同时删除:
sendStream.write(tailParamsBytes);
totalBytes += tailParamsBytes.length;
此代码为多部分添加尾部 header。
我已经做了MD5校验和检查,现在它们是一样的。
请在选项中添加headers
var headers={'headerParam':'headerValue'};
options.headers = headers;
只需参考 GitHub 中的 example。
只需在Headers中输入一个'Content-Type'即可。
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)
基于源代码:
boolean multipartFormUpload = (headers == null) || !headers.has("Content-Type");
if (multipartFormUpload) {
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
}
您会发现通过在 javascript 中设置虚拟 header 选项可以很容易地禁用多部分 header:
options.headers = {"Content-Type":"dummy"}; // set it to something to avoid the plug-in append the header
我成功地使用 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);
};
但是,由于插件添加了额外的 header,我的服务器无法读取图像。
--+++++..Content-Disposition: form-data; name="file"; filename="filename.jpg"..Content-Type: image/jpeg....
我花了一段时间才弄清楚这一点,但这是我删除 Multipart Header 的方式。这是 solution/work 左右。
打开:\platforms\android\src\org\apache\cordova\filetransfer\FileTransfer.java
寻找:
sendStream.write(beforeDataBytes);
totalBytes += beforeDataBytes.length;
评论或删除这两行。它们是添加多部分 header.
的代码同时删除:
sendStream.write(tailParamsBytes);
totalBytes += tailParamsBytes.length;
此代码为多部分添加尾部 header。
我已经做了MD5校验和检查,现在它们是一样的。
请在选项中添加headers
var headers={'headerParam':'headerValue'};
options.headers = headers;
只需参考 GitHub 中的 example。
只需在Headers中输入一个'Content-Type'即可。
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)
基于源代码:
boolean multipartFormUpload = (headers == null) || !headers.has("Content-Type");
if (multipartFormUpload) {
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
}
您会发现通过在 javascript 中设置虚拟 header 选项可以很容易地禁用多部分 header:
options.headers = {"Content-Type":"dummy"}; // set it to something to avoid the plug-in append the header