NodeJS,Axios - 将文件从本地服务器发布到另一台服务器

新手上路,请多包涵

我有一个 API 端点,允许客户端将他们的 csv 发布到我们的服务器,然后将其发布到其他服务器。我已经完成了将上传文件保存到服务器的服务器部分,但我无法完成另一部分。我不断收到错误 { message: 'File not found', code: 400 } 这可能意味着文件永远不会到达服务器。我正在使用axios作为代理,有人知道如何完成吗?谢谢。

 // file = uploaded file
const form_data = new FormData();
form_data.append("file", fs.createReadStream(file.path));
const request_config = {
    method: "post",
    url: url,
    headers: {
        "Authorization": "Bearer " + access_token,
        "Content-Type": "multipart/form-data"
    },
    data: form_data
};
return axios(request_config);

更新

正如 axios doc 所述,我尝试调用的 API 需要一个文件

// data 是作为请求体发送的数据 // 仅适用于请求方法 ‘PUT’、’POST’ 和 ‘PATCH’ // 没有时 transformRequest 是set,必须是以下类型之一: // - 字符串、普通对象、ArrayBuffer、ArrayBufferView、URLSearchParams // - 仅限浏览器:FormData、File、Blob // - 仅限节点:Stream、Buffer

有没有办法让axios整体发送文件?谢谢。

原文由 Tri Nguyen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 518
2 个回答

我认为 createReadStream 是您的问题,因为它是异步的。尝试这个。由于 createReadStream 扩展了事件发射器,我们可以“监听”它何时完成/结束。

 var newFile = fs.createReadStream(file.path);

// personally I'd function out the inner body here and just call
// to the function and pass in the newFile
newFile.on('end', function() {
  const form_data = new FormData();
  form_data.append("file", newFile, "filename.ext");
  const request_config = {
    method: "post",
    url: url,
    headers: {
        "Authorization": "Bearer " + access_token,
        "Content-Type": "multipart/form-data"
    },
    data: form_data
  };
  return axios(request_config);
});

原文由 james emanon 发布,翻译遵循 CC BY-SA 4.0 许可协议

2 个最旧的答案对我不起作用。然而,这起到了作用:

 const FormData = require('form-data'); // npm install --save form-data

const form = new FormData();
form.append('file', fs.createReadStream(file.path));

const request_config = {
  headers: {
    'Authorization': `Bearer ${access_token}`,
    ...form.getHeaders()
  }
};

return axios.post(url, form, request_config);

form.getHeaders() 返回具有内容类型和边界的对象。

例如:

 { "content-type": "multipart/form-data; boundary=-------------------0123456789" }

原文由 blex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题