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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ISO-8859-1乱码恢复

    ISO-8859-1乱码恢复

    2022年1月22日
    64
  • 苹果绕过ID_三分钟教你绕过苹果ID锁,救你的板砖。-海绵宝宝的蟹黄堡[通俗易懂]

    苹果绕过ID_三分钟教你绕过苹果ID锁,救你的板砖。-海绵宝宝的蟹黄堡[通俗易懂]1.Mac端安装并运行最新版爱思助手;2.将iPhone用数据线成功连接至Mac,然后手动操作iPhone进入DFU模式;3.确保Mac已经设置开机密码,并牢记密码。操作步骤:依次点击“刷机越狱-一键刷机-CheckRa1n越狱”:随后爱思助手将自动执行越狱操作,成功越狱后显示“AllDone操作结束”:接下来点击工具箱中的“打开SSH通道”功能:操作完成后找到并…

    2022年9月14日
    1
  • 微信小程序WebSocket实现聊天对话功能完整源码

    微信小程序WebSocket实现聊天对话功能完整源码微信小程序开发交流qq群173683895承接微信小程序开发。扫码加微信。正文:jsvarapp=getApp();varsocketOpen=false;varframeBuffer_Data,session,SocketTask;varurl=’ws://请填写您的长链接接口地址’;varupload_url=’请填写您的图片上…

    2022年6月18日
    36
  • 图像基础知识之YUV

    图像基础知识之YUV一、YUV常用格式YUV是编译true-color颜色空间(colorspace)的种类,Y'UV,YUV,YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮

    2022年7月1日
    27
  • allegro转换成pads_图片转换成pdf格式

    allegro转换成pads_图片转换成pdf格式Allegro转PADS格式硬件技术类2009-06-1316:31:11阅读2114评论3字号:大中小订阅Allegro转PADS格式:有一种比较简单的方式,需要借助CAM350Gr]\E1.allegro导出ODB++档案2.CAM350导入ODB++>EC3.CAM350导出PowerPCB4.0ascm用此种方…

    2025年5月24日
    0
  • linux驱动编写(总结篇)[通俗易懂]

    linux驱动编写(总结篇)[通俗易懂]【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】01、linux驱动编写(入门)02、linux驱动编写(虚拟字符设备编写)03、linux驱动编写(字符设备编写框架)04、linux驱动编写(Kconfig文件和Makefile文件)05、linux驱动编写(块设备驱动代码)06、linux驱动编写(platfo……

    2022年7月26日
    4

发表回复

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

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