gpt4 book ai didi

javascript - multipart/form-data 请求的文件部分的内容类型被客户端设置错误

转载 作者:行者123 更新时间:2023-11-29 10:21:28 27 4
gpt4 key购买 nike

我正在尝试使用以下 JavaScript 和 jQuery 发送 multipart/form-data:

var formData = new FormData();

formData.append("projectName", $("#projectNameInput").val());

var file = $("#fileInput")[0].files[0];
formData.append("content", file);

var xhr = new XMLHttpRequest();
xhr.open('POST', '/project', true);
xhr.onload = function(ev) {
// Handling logic omitted
};
xhr.send(formData);

但是,某些客户端浏览器(Firefox 和 Chrome)会收到来自服务器的 400 Bad Request。在检查 header 和请求负载时,我发现某些浏览器为文件设置了明确的内容类型,如下所示:

------WebKitFormBoundaryEuDIpEU2Ci8VNwNJ 
Content-Disposition: form-data; name="content"; filename="testfile.ext"
Content-Type: EXT Project Data (64bit)

------WebKitFormBoundaryEuDIpEU2Ci8VNwNJ

在工作请求中,Content-Type 应如下所示:Content-Type: application/octet-stream,服务器可以正确处理。

我怀疑这与浏览器的配置或文件关联有关。有没有办法为请求的文件部分显式设置内容类型?

某些使用 Firefox 和 Chrome 的用户会出现此问题。但是,一些用户能够使用 Chrome 和 Firefox 成功上传。我们的应用程序不支持 IE。

最佳答案

好的,我们设法解决了这个问题。事实证明,注册到客户端系统的内容类型在某些安装了某些第三方应用程序的客户端机器上实际上是格式错误的。

我们无法以编程方式更改该部分的内容类型浏览器集。正如 Michael-O 指出的那样,您应该始终使用在 IANA 中注册的内容类型。 .这是一个 link达到标准。

在这种情况下,是第三方软件向客户端系统注册了非法内容类型。内容类型不能包含空格,因此内容类型 EXT Project Data 显然是非法的。我们通过将注册的内容类型更改为 custom content type 来解决此问题。 .所以我们现在使用的内容类型是 application/x-ext-project-data,然后在服务器端正确处理。

关于javascript - multipart/form-data 请求的文件部分的内容类型被客户端设置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com