上传文件是每个前端开发者都会遇到的问题,在之前实习期做了一个上传文件的功能,当时没有彻底搞明白问题所在,现在重新复盘下。

1.使用formData来上传文件,没有使用axios上传文件,之前在学校有做过。生成一个formData对象

let formData = new FormData()
formData.append('xxx', 'yyyyy')

通过dom操作获得input中file[0],然后append给formData对象,网上有详细的api

2.在使用axios之后发先我之前用的方法后台接受不到文件,问题是content-type是application/json,上传文件的时候使用的content-type应该是multipart/form-data才对。看了网上的一些理解,好像是说这个conten-type会在我们上传文件的时候自动变为multipart/form-data,但是为什么我的是json呢。问题的关键在axios身上

axios.interceptors.request.use(
request => {
store.dispatch('httpStatus', { status: '', statusMsg: '' })
return request
},
error => {
return Promise.reject(error)
}
)

axios对我们的request做了一个拦截然后重新返回,这个时候我们的formData会被变为一个Object,浏览器给出的是application/json,所以我们的操作失败了

3.如何解决这个问题呢?

  3.1我们在我们的action.js中修改axios的配置

let config = {
headers: {
'Content-Type': 'multipart/form-data'
}
}

结果当然还是不行,怎么会这么容易就让我搞定呢!!!,后台报错 ---no multipart boundary was found,就是一个二级制的分隔符不见了,我们可以手动添加一个

let config = {
headers: {
'Content-Type': 'multipart/form-data;boundary = ' + new Date().getTime()
}
}

可以了,但是我还是觉得不是很好,应该我们改动了headers里的东西,于是乎又看了我导师和网上的方法,一起贴出来。

  3.2 创建新的axios实例,挂在在vue原型上

  具体参考这篇文章https://www.jianshu.com/p/1405f389fb1d

  3.3 我导师给的方案,在action.js,axios的第三个参数config,加入一个transformRequest

let config = {
headers: {
'Content-Type': 'multipart/form-data'
},
transformRequest: [function (data) {
return data
}]
}

关于这个方法我查了以下api,他是说 transformRequest 允许在向服务器发送前,修改请求数据,这个回调中可以对data进行修改,这样设置 config之后,问题就解决了

关于vue+axios上传文件的踩坑分析的更多相关文章

  1. vue+axios上传文件

    单独上传文件: <input class="file" name="file" type="file" accept="im ...

  2. vue axios上传文件实例

    <head> <title></title> <meta charset="UTF-8"> <meta name=" ...

  3. vue项目上传文件以及进度条

    最近做项目的时候,需要上传自定义镜像.并且附带进度条,上网查询一下资料,经过一番折磨,也总算做出来了,把自己写项目的内容给大家分享一下. 先直接贴代码吧 1.首先声明一个formData对象. 2.把 ...

  4. 使用PUT方法上传文件无法工作原因分析

    现象 在Spring Framework中,使用HTTP的PUT方法上传文件时,在服务器端发现Multipart参数为空. 原因 Spring中的StandardServletMultipartRes ...

  5. 微信小程序上传文件遇到的坑

    在开发小程序时,使用的花生壳做的内网映射,域名使用花生壳卖的https域名 在做小程序文件上传时,调用接口,老是报错. Caused by: org.apache.commons.fileupload ...

  6. qq上传文件进行测试要点分析

    功能 QQ 兼容性 1.Win系统/Mac系统  Android/IOS 品牌 传 1.上传方式:直接拖拽,按回车键上传 2.多个文件同时上传给一人/多人(考虑稳定性,是否存在内存泄露) 3.不是好友 ...

  7. 使用axios上传文件到阿里云对象文件存储服务器oss

    背景 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可以直接向OSS写入或读取数据.OSS支持流式写入和文件写入两种方式.使用阿里云oss做文件存储的时候,不可 ...

  8. 5.Vue临时上传文件夹

    1.在项目目录中,通过npm install multiparty进行安装必要组件npm install multiparty --save-dev 2.app.js中添加app.use(bodyPa ...

  9. Vue.js 上传文件(后台使用.net)

    页面部分 <div id="app"> <form id="myform"> <input type="file&quo ...

随机推荐

  1. Tensorflow2 快速简单安装命令

    使用如下命令 pip3 install numpy pandas matplotlib sklearn tensorflow==2.0.0-alpha0 -i https://pypi.doubani ...

  2. Android开发调试工具ADB的使用

    学习参考博客: https://www.cnblogs.com/meil/archive/2012/05/24/2516055.html ADB(Android Debug Bridge)是Andro ...

  3. HDFS 其他命令---fsck

    HDFS 其他命令 HDFS支持fsck命令用以检查各种不一致.fsck用以报告各种文件问题,如 block丢失或缺少block等.fack 命令用法如下: hdfs fsck <path> ...

  4. HTTP协议随笔

    代理 代理就是处在客户端和服务端之间的服务器.客户端例如浏览器发送GET请求时,代理服务器接收该请求,并转发该请求至服务所在的服务器.服务器回复的数据和资源在第一时间经过代理服务器,才能回传到浏览器, ...

  5. lightGBM gpu环境配置

    推荐先看一手官方的Installation Guide.我用的是ubuntu 16.04,一些要求如下图: 主要是OpenCL以及libboost两个环境的要求. (1) OpenCL的安装.我这里之 ...

  6. 树莓派安装window ioT

    下载安装器 https://developer.microsoft.com/zh-cn/windows/iot/Downloads 操作设备

  7. python 面向对象编程、获取对象信息

    面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...

  8. Mybatis源码解析(二) —— 加载 Configuration

    Mybatis源码解析(二) -- 加载 Configuration    正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...

  9. 6.Javascript如何处理循环的异步操作

    前沿:参考ES6语法的async/await的处理机制 先上一段代码 function getMoney(){ var money=[100,200,300] for( let i=0; i<m ...

  10. mockjs的基本使用入门

    相信很多前端同学都有一个困扰,就是没有后端数据的情况下感觉很多想法都不能动手去实现,这里介绍一个模拟后端数据的工具,可以一定程度上解决我们的困扰. 很多人或多或少的都听说过mockjs,都知道是一个模 ...