NodeJS环境下使用axios上传文件

最近有个需求,需要在nodejs后端上传图片到云存储服务器,刚好对axios这个库比较熟悉,因此便开始在网上查资料,但是网上大多的都是用axios在前端上传文件的代码,即是基于浏览器环境的。后来找到了基于Nodejs环境的axios上传代码,一番copy后便开始了测试,本以为会一帆风顺,没想到服务器那边却总是返回如下错误,也就是说我们的请求并没有以multipart/form-data的形式封装好。

The body of your POST request is not well-formed multipart/form-data.

后来在Stack Overflow上发现一位老哥也遇到了和我一样的问题,看了网友的回答后才发现原来是没有往header里加content-length,所以服务器解析不了我们的数据。因此我们在封装好form-data后,再获取其长度并添加到header里再去请求就OK啦~

附上完整代码:


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

var localFile = fs.createReadStream('./'+fileKey);

var formData = new FormData();
formData.append('key',fileKey);
formData.append('Signature',data.authorization );
formData.append('file',localFile);

var headers = formData.getHeaders();//获取headers
//获取form-data长度
formData.getLength(async function(err, length){
 if (err) {
    return  ;
  }
 //设置长度,important!!!
 headers['content-length']=length;

await axios.post(data.url,formData,{headers}).then(res=>{                    
       console.log("上传成功",res.data);
  }).catch(res=>{
    	console.log(res.data);
 })

})			

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值