這是捲曲例子正常工作職位:如何使用的multipart/form-data的頭和FORMDATA使用取
curl -X POST \
<url> \
-H 'authorization: Bearer <token>' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F [email protected] \
-F userId=<userId>
我試圖重現使用isomorphic-fetch這一請求。
我試過下面的代碼:
const formData = new FormData();
formData.append('file', file);
formData.append('userId', userId);
return fetch(`<url>`, {
method: 'POST',
headers: {
'Content-Length': file.length
'Authorization: Bearer <authorization token>',
'Content-Type': 'multipart/form-data'
},
body: formData
})`
我爲了產生傳遞到FormData
的file
使用fs.readFileSync
。
前面的示例返回一個錯誤消息,指出嵌入所述令牌(通過標頭中發送)的userId
不匹配userId
從formData
通過了401
HTTP狀態代碼(未授權的)。
所以我的懷疑是到達REST API的FormData
沒有適當的形成。
該問題可能與Content-Length
頭有關,但我沒有找到更好的方法來計算的話(如果我不使用Content-Length
頭,我收到了411
HTTP狀態代碼Content-Length
頭丟失)。
可能是由於Content-Length
標題中的值不正確而導致失敗的情況?
關於爲什麼這是失敗或如何更好地調試它的任何其他建議?
如果需要進一步的信息來澄清這個問題,請提問。
UPDATE
我一直在使用該方法formData.getLengthSync()
試過form-data模塊,以獲得正確的Content-Length
值然而,問題依舊(401
錯誤HTTP狀態代碼響應)。
降'Content-Type'請求頭部需要由瀏覽器自動生成以包含多部分邊界。我想如果你放棄這個和Content-Length標題你應該沒問題。 – idbehold
我已經試過,沒有成功,當我不發送Content-Length頭時,API會返回一個411錯誤的HTTP狀態碼:服務器拒絕接受沒有定義的Content-長度「 – rfc1484
嘗試將Content-Length設置爲12345.無論您上傳到的服務器設計得不是很好。 – idbehold