这是一个运行良好的 CURL 示例:
curl -X POST \
<url> \
-H 'authorization: Bearer <token>' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F file=@algorithm.jpg \
-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
})`
我使用fs.readFileSync
以生成file
传递给FormData
.
前面的示例返回一个401
HTTP 状态代码(未经授权),并带有一条错误消息,指出嵌入在令牌中(通过标头发送)与传递的 fromuserId
不匹配。userId
formData
所以我怀疑FormData
到达 REST API 的那个没有充分形成。
问题可能与Content-Length
标头有关,但我没有找到更好的计算方法(如果我不使用Content-Length
标头,我会收到411
HTTP 状态代码Content-Length
标头丢失)。
可能是由于Content-Length
标头中的值不正确而导致失败的情况?
关于为什么失败或如何更好地调试它的任何其他建议?
如果需要进一步的信息来澄清这个问题,请询问。
更新
我已经尝试了表单数据模块,以便Content-Length
使用该方法获得正确的值formData.getLengthSync()
但是问题仍然存在(401
错误 HTTP 状态代码响应)。