NodeJS 节点-使用AXIOS将本地文件POST到远程端点

pn9klfpd  于 2023-01-08  发布在  Node.js
关注(0)|答案(2)|浏览(147)

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;
我感谢任何和所有的帮助!

o4hqfura

o4hqfura1#

我不知道您为什么要尝试使用ReadStream读取文件,因为您需要整个文件才能将其发布到端点。
使用ReadStream的好处是可以在读取文件时执行操作,因此对文件的每个块都可以执行一些操作。
在这种情况下,我相信您所需要做的只是读取文件,然后触发POST请求。
您可以通过使用readFileSync而不是createReadStream来完成此操作。
你的代码应该是这样的:

try {
    const fileContents = await fs.readFileSync('./pathtofile.ext',{encoding: 'the-right-encoding'});
    let formData = new FormData();

    formData.append('myFile', fileContents, '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)
}

这样,await 关键字就更有意义了,因为您将等待readFileSync承诺得到解析。
确保选择正确的编码来阅读文件。
此外,由于您使用的是Axios,因此可以通过为post方法提供回调函数来检查上载的状态。

const onUploadProgress = (event) => {
    const percentage = Math.round((100 * event.loaded) / event.total);
    console.log(percentage);
  };

用法:https://www.bezkoder.com/axios-file-upload/

o2g1uqev

o2g1uqev2#

首先,你应该去一个像Reqbin这样的网站,模拟请求,以确保你的web端点不是问题。我花了很多时间用我自己的端点测试你的代码,它工作得很好。大多数时候,这样的问题是由于授权,限速或诸如此类的东西。也许我可以帮助如果我知道端点的类型。祝你好运。

相关问题