NodeJS环境下使用axios上传文件

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

大家好,又见面了,我是你们的朋友全栈君。

最近有个需求,需要在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);
 })

})			

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149289.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • listagg 函数[通俗易懂]

    listagg 函数[通俗易懂]listagg函数–oracle11grelease2转载:http://xpchild.blog.163.com/blog/static/10180985920108485721969/本文描述了在oracle11grelease2版本中新增的listagg函数,listagg是一个实现字符串聚合的oracle内建函数。作为一种普遍的技术,网络上也有多种实现字符串聚合的方…

    2022年9月7日
  • scrapy爬虫案例_Python爬虫 | 一条高效的学习路径

    scrapy爬虫案例_Python爬虫 | 一条高效的学习路径数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如:豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索用户的舆论导向。淘宝、京东:抓取商品、评论及销量数据,对各种商品及用户的消费场景进行分析。搜房、链家:抓取房产买卖及租售信息,分析房价变化趋势、做不同区域的房价分析。拉勾、智联:爬取各类职位信息,分析各行业人才需求情况及薪资…

    2022年6月26日
  • px像素和dp像素密度区别[通俗易懂]

    px像素和dp像素密度区别[通俗易懂]px即像素,1px代表屏幕上一物理像素点。dp(dip)Densityindependentpixels.设备无关像素,与像素密度相关。像素密度:每英寸包涵的像素数

    2022年5月25日
  • 贝叶斯分类器[通俗易懂]

    贝叶斯分类器[通俗易懂]实验名称:贝叶斯分类器一、实验目的和要求目的:掌握利用贝叶斯公式进行设计分类器的方法。要求:分别做出协方差相同和不同两种情况下的判别分类边界。二、实验环境、内容和方法环境:windows7,m

    2022年8月1日
  • goland2021.3激活码破解方法「建议收藏」

    goland2021.3激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
  • idea2021永久激活注册码-激活码分享

    (idea2021永久激活注册码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号