[英]the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is false
[英]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.