使用axios+formdata+vue上传图片遇到后台接受不到图片的值的问题

先直接贴代码

html代码如下:

<input type="file"@change="getFileExpr($event)">
<el-form id="uploadForm" :rules="rules2" method="post" enctype="multipart/form-data">
这个地方我是使用的element ui框架中的form组件 原生的html的form标签也可以,主要添加 id 和指定
method="post" enctype="multipart/form-data"
//onchange 方法 拿到文件名称和文件getFileExpr(event){  this.fileName = event.target.files[0].name;  this.file = event.target.files[0];},
//关于formdata使用方式请自行搜索let uploadForm=document.getElementById("uploadForm");
let formData = new FormData(uploadForm); formData.append(‘img‘, this.file);
this.$http.post(‘url‘,formData) .then(response => { })


通常来说这样就可以了 这个地方的this.$http 是axios全局配置然后导入到vue的prototype 问题出于在全局配置的时候因为post请求是formdata格式的,所以要引入qs这个模块用于格式化data数据,但是如果你是使用上传的话就不要用qs来格式化这个数据了,否则的话后台是接收不到数据的,所以这个判断应该在加一个条件

 //config.data.constructor !== FormData 不等于formdata的情况下 qs数据
if(config.method  === ‘post‘ && config.data.constructor !== FormData){
      config.data = qs.stringify(config.data);
  }

以上就是原因,初识axios的时候需要配置很多东西不像以往的基于jq的ajax,比如需要默认情况下axios请求是json格式而后端需要formdata格式就需要引入qs模块,比如上传图片还要再次加判断这样,遇到这种问题,先看后端报什么错误,如果后端没问题,那么就去找文档、去搜索、先把错误规模逐渐变窄、比如这个问题,最先开始是后端接收不到我上传的图片,只能接收到文字信息,先从fromdata这种查,因为也是第一次用formdata,然后对照网上的案例没有问题,再使用jq的ajax请求,却可以请求得到,说明问题还是出在aixos上,对于新手而言把错误规模逐渐变窄 我认为这是个很好的思想




原文地址:https://www.cnblogs.com/jinrupeng/p/8338198.html

时间: 2024-10-06 22:44:47

使用axios+formdata+vue上传图片遇到后台接受不到图片的值的问题的相关文章

vue上传图片并压缩后以formData形式传给后台

vue上传图片 html <div id="file"> <input class="inputtt" type="file" @change="upfile($event)" accept="image/*" /> </div> js //上传图片 upfile(event) { var file = event.target.files[0] var name = e

多文件上传以及java后台接受

最近项目用到的,实现多文件以及一些信息上传, 以及后台接收及读取用到了spring及springmvc相关框架. 不多说废话,直接上例子(这有关键代码) 首先,前台页面 <form action="/uploader/upload/uploadFiles" method="post" enctype="multipart/form-data"> <input type="file"size="30&

后台接受ajax传递值的实例代码

后台接受ajax传递值的实例代码: 使用ajax可以实现无刷新数据交互,下面是一段后台代码接收ajax传递值的实例代码供需要的朋友参考,希望能够带来帮助. ajax代码如下: $(function (){   timestamp=0;   $("#chatform").submit(function (){     var message=$("#msg").val();     var name=$("#author").val();    

AJAX上传multipart/form-data类型参数时,后台无法接收的解决方案

前台使用AJAX上传multipart/form-data类型参数时,后台接收到的值全是NULL,这有以下几个原因: 1.变量名称没有一一对应. 解决方案:检查前上传的name和后台的entity名称是否一样. 2.没有在Spring配置文件中添加如下配置: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"

基于axios的vue插件,让http请求更简单

ajax-plus 基于axios 的 Vue 插件 如何使用 npm 模块引入 首先通过 npm 安装 ```npm install --save ajax-plus or yarn add ajax-plus -S <p>然后在入口文件引入并配置:</p> <p>对标axios的配置,详见<a href="https://www.npmjs.com/package/axios" rel="nofollow noreferrer&q

MVC中根据后台绝对路径读取图片并显示在IMG中

数据库存取图片并在MVC3中显示在View中 根据路径读取图片: 1 byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); 简介:在有些情况下需要将图片转换为二进制流存放在数据库中,当显示时再从数据库中读出来显示在界面上. 本文简单介绍数据库中图片的存取方法,并在MVC3中显示在Razor视图中.仅供初学者参考学习. 1. 将图片转换为二进制流 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

前端处理后台返回的乱码图片

问题描述: 请求后台接口,返回如下图的乱码. 根据全场乱字符+JFIF标记,确定是个JPEG文件的二进制流,而不是base64. 解决方法: 1 this.$axios.get('api',{responseType: 'arraybuffer'}) 2 .then(res=>{ 3 this.formData.imgUrl = 'data:image/png;base64,' + btoa( 4 new Uint8Array(res.data).reduce((data, byte) =>

JSF页面中使用js函数回调后台bean方法并获取返回值的方法

由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的,很可能会误导使用者. 相对来说,看国内的那些仅仅是翻译过来的文章或书籍不如直接看国外的官方文档或资料来的实在,在我讲述jsf页面中如何使用js调用后台bean方法之前,先给大家说几个国外的资料.在primefaces官方网站上,你可以搜索到几乎所有你需要的东西,primefaces官网为:http:

asp后台获取js中变量的值

<span id="s1"  runat="server">span</span> js对其赋值 document.getElementById('s1').innerHtml="value"; 后台获取时: s1.innerHtml的值始终为span,但是页面上其显示值已经为value.查看源代码后发现span标签中的值仍然是span. 换了Jquery,$("#s1").innerHtml()效果一