繁体   English   中英

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

[英]Content type for file part of the multipart/form-data request is set wrong by the client

我正在尝试使用以下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 在检查标头和请求有效负载时,我发现某些浏览器为文件设置了显式内容类型,如下所示:

------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注册的内容类型。 这是标准的链接

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM