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


相关推荐

  • 激光slam理论与实践_SLAM算法

    激光slam理论与实践_SLAM算法激光SLAM笔记(1)——激光SLAM框架和基本数学理论1、SLAM分类1.1、基于传感器的分类1.2、基于后端的分类2、激光SLAM算法(基于优化的算法)2.1、激光SLAM算法的流程2.2、激光SLAM常用算法2.3、激光SLAM在实际环境中的问题3、激光SLAM算法介绍3.1、2D激光SLAM3.2、3D激光SLAM1、SLAM分类1.1、基于传感器的分类1.2、基于后端的分类 …

    2022年8月23日
    8
  • java怎么创建文件夹文本文件_java删除文件夹下指定文件

    java怎么创建文件夹文本文件_java删除文件夹下指定文件jikpackagetest.file;//time:05-12-22//author:[email]huapingsmith@hotmail.com[/email]//description:程序先检查文件夹是否存在,如果不存在,则创建一个,存在,则继续运行.//文件夹处理完成后,下一步工作为往文件夹中创建文件.//caution:当前文件夹中如果已经有名为abc.txt的文件时,//…

    2025年7月2日
    3
  • SSRF漏洞进阶——攻击内网Redis

    SSRF漏洞进阶——攻击内网Redis警告请勿使用本文提到的内容违反法律。本文不提供任何担保目录警告一、拓展攻击面二、实验环境三、实践漏洞学习(一)环境部署与BlindSSRF方法是:通过观察响应时间和响应状态判断指定端口是否打开。(二)CentOS机器开启Redis服务,kali机器写定时任务到CentOS机器中。(三)通过gopher协议攻击Redis四、漏洞修复警告SSRF漏洞分析与实践_xiaochuhe.的博客-CSDN博客一、拓展攻击面结合gop…

    2022年6月25日
    40
  • android系统签名工具,android应用实现重启系统+签名「建议收藏」

    android系统签名工具,android应用实现重启系统+签名「建议收藏」1.在AndroidManifest.xml文件的manifest标签中加入一条android:sharedUserId=”android.uid.system”package=”com.ipanel.update”android:versionCode=”1″android:versionName=”1.0″android:sharedUserId=”android.uid.system”&g…

    2022年6月21日
    27
  • 物联网流量卡管理系统源码_物联网数据管理系统结构

    物联网流量卡管理系统源码_物联网数据管理系统结构物联网卡管理平台源码-物联网卡管理系统源码V5.0版本内置十余条的第三方管理平台,如申达、硕朗、天移、奇成等可以直接对接内置微信商户、免签支付、支付宝当面付内置安装教程,从购买服务器到安装完成,仅需5步!………………………………………………………

    2022年9月26日
    4
  • 谈谈唯一约束和唯一索引的关系_唯一约束和主键约束的一个区别是

    谈谈唯一约束和唯一索引的关系_唯一约束和主键约束的一个区别是最近在看数据库相关知识,感觉唯一约束和唯一索引好像有点类似,于是研究了一番,于是就有了这篇文章。概念开始之前,先解释一下约束和索引。约束全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性。索引数据库中用的最频繁的操作是数据查询,索引就是为了加速表中数据行的检索而创建的一种分散的数据结构。可以把索引类比成书的目录,有目录…

    2026年2月3日
    3

发表回复

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

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