多个异步 post 请求与 nodejs 中的文件

multiple asynchronous post request with files in nodejs

我尝试在 nodejs 中发送一堆 post 文件上传请求。 使用 axios.post,我可以轻松地发出单个请求。但是在尝试发送多个异步请求时出现错误。

基于axios文档,使用axios.all([ axios.get(), axios.get(), ...]) 进行异步请求。

如果我发送代码,错误显示:

"Error: Request failed with status code 500 ~ "

。当我发送一个没有文件上传的请求时,这个错误是一样的。所以我想当我发送异步请求时我的代码没有附加文件。

请告诉我我缺少什么。

我的代码如下:

var axios = require('axios');
var FormData = require('form-data');
var fs = require('fs');
var data = new FormData();
data.append('files', fs.createReadStream('./liscense.jpg'));

var config = {
  method: 'post',
  url: 'https://domainname/scan/id',
  headers: { 
    ...data.getHeaders()
  },
  data : data
};

axios
.all([axios(config), axios(config)])
.then(
    axios.spread((res1, res2) => {
        console.log(res1.data, res2.data);
    })
)
.catch((error) => {
  console.log(error);
});

你的问题是你正在发送一个空流,

您的表单数据中有一个“_streams”数组,其中包含您的“liscense.jpg”文件的流,当您POST向目标主机发出第一个请求时,该流将为空并且您的其他请求流为空,因此文件未到达您的目的地。

简而言之,此代码仅在第一次请求中发送一次您的文件,其他请求不包含您的 file/files。

你可以试试这个:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

function postRequest() {
    const data = new FormData();
    data.append('files', fs.createReadStream('./liscense.jpg'));
    const config = {
        method: 'post',
        url: 'https://domainname/scan/id',
        headers: {
            ...data.getHeaders()
        },
        data: data
    };
    return config;
}

axios
    .all([axios(postRequest()), axios(postRequest())])
    .then(
        axios.spread((res1, res2) => {
            console.log(res1.data, res2.data);
        })
    )
    .catch((error) => {
        console.log(error);
    });