【问题标题】:how to use xhr.overrideMimeType in Chrome / IE Edge?如何在 Chrome / IE Edge 中使用 xhr.overrideMimeType?
【发布时间】:2016-12-02 22:37:58
【问题描述】:

我在发送文件(表单数据格式的请求的一部分)时遇到问题。

问题似乎来自于 Chrome for Linux 中的 only 文件(它是 CVS 文件,扩展名为 .csv 和基本上只是文本)通过 mimetype(请求正文中的内容类型)发送 Content-Type: application/octet-stream

所以,我试图覆盖 mimetype 以匹配 ChromeLinux 上发送的相同类型,即 text/csv

但是,mimetype 显然没有被覆盖,仍然作为 octet-stream 发送。

我的代码:

let xhr = new XMLHttpRequest();
let form = new FormData();

form.append('file', file, file.name); // the file is loaded correctly
form.append('payload', JSON.stringify(data)); // data is just a JSON object

xhr.onreadystatechange = function() { 
     if (xhr.readyState === XMLHttpRequest.DONE) {
         // we arrive here both on Debian and Windows 10
     }
} 
xhr.upload.onerror = function() { .... } // no error

xhr.open('POST', 'http://<my_url>', true);

console.log(file.type);
xhr.overrideMimeType("text/csv");

xhr.send(form);

几点说明:

  • console.log(file.type) 实际上打印“text-csv”,但仅在 Chrome for Linux(特别是 Debian) 中。在其他情况下(任何其他浏览器或平台)不打印任何内容
  • 鉴于前面的观点,出于某种原因,我似乎很清楚任何其他浏览器/平台无法识别文件类型,因此文件作为 octet-stream 发送strong>(通用二进制文件)

【问题讨论】:

    标签: google-chrome xmlhttprequest


    【解决方案1】:

    xhr.overrideMimeType 更改响应的 MIME 类型,而不是请求。

    如果您想更改文件的 MIME 类型,只需创建一个具有明确文件类型的新 Blob

    var blob = new Blob([blob], {type: 'text/csv'});
    form.append('file', blob, file.name);
    

    以上内容根据需要将上传表单中文件的 MIME 类型更改为“text/csv”。

    PS。如果您真的想更改整个 请求(而不仅仅是文件)的 MIME 类型,请使用xhr.setRequestHeader('Content-Type', 'custom MIME type here');。 (仅当您在 xhr.send 方法中发送非标准或自定义数据时才有意义)。

    【讨论】:

    • 谢谢罗布。所以基本上,我采用“文件”变量(这是一个 blob),我用它来创建一个不同类型的新 blob?
    • 没关系,它成功了!但你能澄清一下为什么要实际使用 overrideMimeType 吗?
    • @dragonmnl 例如xhr.responseXML 仅在响应是 XML 文档时设置。如果您期待 XML 响应,但服务器没有正确设置响应的 MIME 类型,那么您可以覆盖 MIME 类型以确保浏览器尝试将响应解析为 XML,使用 xhr.overrideMimeType('application/xml')
    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多