我正在将我的一个项目从request
over 切换到更轻量级的项目(例如 got、axios 或 fetch)。一切都很顺利,但是,我在尝试上传文件流(PUT
和POST
)时遇到了问题。它适用于请求包,但其他三个中的任何一个都从服务器返回 500。
我知道 500 通常意味着服务器端的问题,但它仅与我正在测试的 HTTP 包一致。当我恢复我的代码使用request
时,它工作正常。
这是我当前的请求代码:
Request.put(`http://endpoint.com`, {
headers: {
Authorization: `Bearer ${account.token.access_token}`
},
formData: {
content: fs.createReadStream(localPath)
}
}, (err, response, body) => {
if (err) {
return callback(err);
}
return callback(null, body);
});
这是使用另一个包的尝试之一(在这种情况下,得到了):
got.put(`http://endpoint.com`, {
headers: {
'Content-Type': 'multipart/form-data',
Authorization: `Bearer ${account.token.access_token}`,
},
body: {
content: fs.createReadStream(localPath)
}
})
.then(response => {
return callback(null, response.body);
})
.catch(err => {
return callback(err);
});
根据获取的文档,我还尝试form-data
根据其示例将包与它结合使用,但我仍然遇到同样的问题。
我可以收集的这两个之间的唯一区别是got
我必须手动指定Content-Type
标头,否则端点确实会给我一个适当的错误。否则,我不确定这 2 个包是如何使用流构建主体的,但正如我所说,fetch
并且axios
也会产生与got
.
如果您想要使用任何片段,fetch
或者axios
我也很乐意发布它们。