【问题标题】:Cordova File Transfer remove Multipart or Content-Disposition HeaderCordova 文件传输删除 Multipart 或 Content-Disposition 标头
【发布时间】:2015-09-19 11:12:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    寻找:

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

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

    同时删除:

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

    此代码为多部分标题添加尾部。

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

    【讨论】:

      【解决方案2】:

      请在选项中添加标题

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

      只需参考来自 GitHub 的 example。

      【讨论】:

        【解决方案3】:

        只需在 Headers 中添加一个“Content-Type”即可。

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

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

        【讨论】:

        • 我根本不想要任何 Multipart 表单数据或任何 Content-Type 值。我查看了 FileTransfer.java 中的代码,似乎没有任何选项可以完全关闭它。虽然不优雅,但 4 行的简单注释就可以完成这项工作,而无需对我的网络服务进行任何更改。
        【解决方案4】:

        基于源代码:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          • 2015-07-17
          • 2011-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多