javascript - 如何下载远程图像然后将图像作为图像文件上传以进行表单提交?

标签 javascript node.js axios node-modules form-data

有类似的问题,如 this , this , this , 和 this ,但没有帮助。
在 Node 中,目标是使用 axios 模块从 Twitter 下载图像,然后将此图像作为图像文件作为表单提交的一部分上传。
此代码下载 Twitter 图像,但上传的二进制图像在到达服务器(也是我们的服务器)时已损坏。
图片必须以二进制形式上传。
需要一个表单,因为其他字段也与二进制图像一起提交。删除了这些其他表单字段以简化代码示例。

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

        let response = await axios.get('https://pbs.twimg.com/media/EyGoZkzVoAEpgp9.png', {
                                responseType: 'arraybuffer'
                             });

        let imageBuffer = Buffer.from(response.data, 'binary');    
        let formData = new FormData();          
        formData.append('image', imageBuffer);

        try {
            let response = await axios({
                method: 'post',
                url: serverUrl,
                data: formData,
            });

            // Do stuff with response.data

        } catch (error) {
            console.log(error)
        }

最佳答案

你应该通过 headers使用 formData.getHeaders() 到 axios 调用发送 Content-Type multipart/form-data 的 header .没有它,一个 Content-Type application/x-www-form-urlencoded 的 header 已发送。你可以通过 responseTypestream到下载图像并将流添加到表单数据的 axios 调用。
您也可以使用axios.post简化方法调用。

const url = 'https://pbs.twimg.com/media/EyGoZkzVoAEpgp9.png'
const { data: stream } = await axios.get(url, {
  responseType: 'stream',
})

const formData = new FormData()
formData.append('image', stream)

try {
  const { data } = await axios.post('http://httpbin.org/post', formData, {
    headers: formData.getHeaders(),
  })
  console.log(data)
} catch (error) {
  // handle error
}
Edit Axios File Upload With Streams

关于javascript - 如何下载远程图像然后将图像作为图像文件上传以进行表单提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67225319/

相关文章:

javascript - 单击时从特定 <li> 标记填充表单

javascript - 使用本地模块,使用本地依赖

javascript - webpack构建后访问全局变量

javascript - API正在使用CORS,我如何在vue中使用axios?

react-native - 如何通过Axios从Expo-av上传录音文件?

javascript - 如何使用 jQuery 添加 HTML 属性

javascript - "Uncaught SyntaxError: import declarations may only appear at top level of a module":1:18 asking again

javascript - 使用 JavaScript 检查元素 CSS 显示

javascript - NodeJS Express 请求实体太大

javascript - 在 axios 拦截器中使用时 redux 调度不起作用