在我的Angular 2应用程序中(但我猜它与Angular无关,而是与浏览器无关,因为我直接使用xhr),我发送表单数据(文件+字符串对象)。
问题是,在 Linux(Debian)上的Chrome浏览器上正常,但仍然在 Chrome 上,但在 Windows上运行( 10)它没有。
代码:
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);
xhr.send(form);
展望@ DevTools - &gt;网络 - &gt; http://my_url ,请求的有效负载是相同的:(这是来自Debian)
------WebKitFormBoundaryVBFM8mVbOsD54jDd
Content-Disposition: form-data; name="file"; filename="my file.csv"
Content-Type: text/csv
------WebKitFormBoundaryVBFM8mVbOsD54jDd
Content-Disposition: form-data; name="payload"
{"property1": "x", "property2": "y"}
------WebKitFormBoundaryVBFM8mVbOsD54jDd--
我看到的唯一区别是Windows上文件的内容类型(在有效负载中)是 application / octet-stream (据我所知,这可能是因为它被认为是“通用”文件,不是.csv类型的文本文件)
任何线索为什么会发生这种情况?我的代码出了什么问题?(无论在Windows或Os X上的哪个浏览器,它似乎都在Linux上运行 )