【问题标题】:Changing filename in BlobBuilder to be passed as FormData on XHR在 BlobBuilder 中更改文件名以作为 XHR 上的 FormData 传递
【发布时间】:2012-01-19 16:27:23
【问题描述】:

我目前正在尝试将 ArrayBuffer 上传到服务器(我无法更改),该服务器需要我以多部分/表单数据格式上传的文件。服务器从Content-Disposition 部分提取将被保存的filename,并在Content-type 下提取将在提供文件时使用的MIME 类型。目前,我已成功上传文件:

var xhr = new XMLHttpRequest();
var fdata = new FormData();
var bb;

if (WebKitBlobBuilder) {
    bb = new WebKitBlobBuilder();
} else if (MozBlobBuilder) {
    bb = new MozBlobBuilder();
} else if (BlobBuilder) {
    bb = new BlobBuilder();
}

bb.append(obj.array);

fdata.append('file', bb.getBlob("application/octet-stream"));

xhr.open("POST", url, true);
xhr.send(fdata);

但标头是按照浏览器的喜好发送的,例如在 Chrome 上:

Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: application/octet-stream;

我曾考虑使用 FileWriter API 将其保存到临时文件中,然后上传,但这是不对的。

回答时要考虑

  • 服务器无法修改,我也不愿意选择其他服务器提供商。
  • 它必须至少可以在 Firefox 和 Chrome 上运行(我的应用程序已经仅限于这两种浏览器)。

【问题讨论】:

    标签: javascript xmlhttprequest mime-types multipartform-data


    【解决方案1】:

    我自己解决了这个问题,感谢 Chromium 问题将我指向 w3c 标准草案 XMLHttpRequest 的答案。基本上我应该改变:

    fdata.append('file', bb.getBlob("application/octet-stream"));
    

    到:

    fdata.append('file', bb.getBlob("application/octet-stream"), obj.filename);
    

    它给出了想要的结果。

    【讨论】:

    猜你喜欢
    • 2011-10-03
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多