nodejs使用axios以formdata形式上传图片
FormData是一种用于发送表单数据的接口,它可以用来上传文件。在前端,可以通过创建一个FormData对象,将要上传的文件添加到这个对象中,然后通过AJAX请求将这个FormData对象发送给服务器。服务器在接收到这个请求后,可以解析FormData对象,获取上传的文件。
首先安装三个包
npm i form-data
npm i request
npm i axios
代码
const FormData = require('form-data')
var request = require('request')
const axios = require('axios');
const fs = require('fs');
// 下载网络图片保存到本地
var src = 'https://img.zcool.cn/community/011aad554be56f000001bf72c38864.jpg@1280w_1l_2o_100sh.jpg'
var readStream = request(src)
readStream.pipe(fs.createWriteStream('./'+src.substr(src.lastIndexOf('/'),src.length)))
readStream.on('end', function(response) {
console.log('文件写入成功');
const formData = new FormData()
formData.append('file', fs.createReadStream('./'+src.substr(src.lastIndexOf('/'),src.length)))
formData.append('type',1)
var headers = formData.getHeaders();//获取headers
//获取form-data长度
formData.getLength(async function(err, length){
if (err) {
console.log('------------------')
console.log(err)
return ;
}
//设置长度,important!!!
headers['content-length']=length;
axios.post(`https://admin.*****.com/api/api/upload`,formData,{headers}).then(datas=>{
console.log("上传成功",datas.data);
// console.log('datas=============================')
// 删除文件
fs.unlinkSync(__dirname+'/'+src.substr(src.lastIndexOf('/'),src.length))
}).catch(res=>{
console.log(res.message);
})
})
});