Cra*_*lot 1 javascript form-data node.js node-modules axios
在 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)
}
Run Code Online (Sandbox Code Playgroud)
您应该通过headers使用爱可信调用formData.getHeaders()发送Content-Type的报头multipart/form-data。没有它,将发送一个Content-Type标头application/x-www-form-urlencoded。您可以将 a responseTypeof传递给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
}
Run Code Online (Sandbox Code Playgroud)