此bounty已结束。此问题的答案可获得+50的声望奖励。奖励宽限期将在10小时后结束。Speedy059正在查找此问题的最新答案。
我在NodeJS服务器上获取一个本地文件并将其上传到一个Web端点时遇到了一些麻烦。我一直收到错误:
Axios错误:请求失败,状态代码为400,结算时间为(D:\我的项目\节点_模块\axios\距离\节点\axios.cjs:1855:12),接收时间为消息。处理时间为消息结束时间为(D:\我的项目\节点_模块\axios\距离\节点\axios.cjs:2712:11),结束时间为消息发出时间为(节点:事件:539:35),处理时间为TicksAndRejections(节点:内部/进程/任务队列:83:21),处理时间为NT(节点:内部/流/可读:1345:12),处理时间为TicksAndRejections(节点:内部/进程/任务队列:83:21){代码:'错误_错误_请求',
我不完全确定我做错了什么。我已经写了很多帖子,看起来我的AXIOS帖子结构是正确的。
try {
const fileStream = await fs.createReadStream('./pathtofile.ext');
let formData = new FormData();
formData.append('myFile', fileStream, 'pathtofile.ext');
axios.post('https://my.endpoint.com', formData, {
headers: {
...formData.getHeaders(),
}
})
.then(res => res.data)
.catch( err => console.log(err))
} catch(err) {
console.error(err)
}
我有点不知所措,因为我似乎找不出这么简单的任务我做错了什么?当我调用“getHeaders()"时,标题似乎也是正确的,它显示“'content-type': 'multipart/form-data;
“
我感谢任何和所有的帮助!
2条答案
按热度按时间o4hqfura1#
我不知道您为什么要尝试使用ReadStream读取文件,因为您需要整个文件才能将其发布到端点。
使用ReadStream的好处是可以在读取文件时执行操作,因此对文件的每个块都可以执行一些操作。
在这种情况下,我相信您所需要做的只是读取文件,然后触发POST请求。
您可以通过使用readFileSync而不是createReadStream来完成此操作。
你的代码应该是这样的:
这样,await 关键字就更有意义了,因为您将等待readFileSync承诺得到解析。
确保选择正确的编码来阅读文件。
此外,由于您使用的是Axios,因此可以通过为post方法提供回调函数来检查上载的状态。
用法:https://www.bezkoder.com/axios-file-upload/
o2g1uqev2#
首先,你应该去一个像Reqbin这样的网站,模拟请求,以确保你的web端点不是问题。我花了很多时间用我自己的端点测试你的代码,它工作得很好。大多数时候,这样的问题是由于授权,限速或诸如此类的东西。也许我可以帮助如果我知道端点的类型。祝你好运。