我遇到发送文件的问题(表单数据格式的请求的一部分)。
这个问题似乎来自 Chrome Linux Linux 文件中的 <(这是CVS文件,扩展名为.csv和基本上只是文本)与mimetype一起发送(请求正文中的内容类型)内容类型:application / octet-stream
所以,我正在尝试覆盖 mimetype以匹配 Linux 上 Chrome 发送的相同内容 text / csv
然而,mimetype显然不覆盖,仍然以八位字节流发送。
我的代码:
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);
几点说明:
答案 0 :(得分:1)
xhr.overrideMimeType
更改了响应的MIME类型,而不是请求。
我想更改文件的MIME类型,只需创建一个具有明确文件类型的新Blob:
DebitCard d; // balance is set to 100
d.makePayment(91.50);
cout << std::setprecision(3) << d.getBalance() << endl; // 7.58
d.chargeCard(200);
cout << std::setprecision(3) << d.getBalance() << endl; // 208
d.makePayment(91.50);
cout << std::setprecision(3) << d.getBalance() << endl; // 115
以上内容根据需要将上传表单中文件的MIME类型更改为“text / csv”。
PS。如果您真的想要更改整个请求的MIME类型(而不仅仅是文件),请使用var blob = new Blob([blob], {type: 'text/csv'});
form.append('file', blob, file.name);
。 (只有在xhr.setRequestHeader('Content-Type', 'custom MIME type here');
方法中发送非标准或自定义数据时才有意义。)