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



我使用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....

我花了一段时间才弄清楚这一点,但这是我删除Multipart Header的方式。这是解决方案/解决办法。

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

查找:

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

注释掉或删除这两行。它们是添加多部分标头的代码。

同时删除:

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

这段代码为多部分标头添加了一个尾部。

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

请将标题添加到选项

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

请参阅GitHub中的示例。

只需在Headers中放入一个"内容类型"。

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

https://github.com/apache/cordova-plugin-file-transfer#example-带有上传标题和进度事件的android和ios仅

基于源代码:

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

相关内容

  • 没有找到相关文章

最新更新