有类似的问题,如 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 已发送。你可以通过 responseType
的 stream
到下载图像并将流添加到表单数据的 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
}
关于javascript - 如何下载远程图像然后将图像作为图像文件上传以进行表单提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67225319/