前端上传文件 设置请求头multipart/form-data 上传失败

上传文件

总体来说前端上传文件一共有两种方式;
1、使用base64;正常加参数上传给后台、这种方式在手机端会很慢、因为在手机在转化文件为base64时很慢;
2、使用FormData 上传 设置请求头multipart/form-data

content-type 作用是告诉服务器,浏览器发来了什么数据;

在做项目时,一般会和后台协商、使用
1、application/x-www-form-urlencoded传输
2、application/json 传输
但在上传文件时需要修改content-type为multipart/form-data;

最近在做umi的一个项目、因为公共的请求头设置为application/x-www-form-urlencoded;
导致在上传文件时需要单独对接口Content-Type做设置、
发现上传文件报错、但使用postman或者使用ant组件库中的上传组件也是没有问题;
那问题肯定出在前端;

于是我们看了浏览器中上传成功的network请求、发现content-type是这样的
前端上传文件 设置请求头multipart/form-data 上传失败_第1张图片
而失败的,因为自己指定content-type所以没有后面的boundary

而umi-request 一旦在封装的统一的request中默认为application/json、项目又需要给其他接口设定application/x-www-form-urlencoded;

所以类似umi-request请求库 有以下3种解决方式

1、每个接口自定义请求头 上传文件的请求头不设置content-type;
2、在request拦截器中判断只在requestType不为form(即不是上传文件的接口)的设置公共的请求头;
3、重新在封装一个不指定请求头的request文件、上传文件的使用这个请求文件!

如果使用的请求为jquery的ajax 、只需要在对应的上传接口设置content-type为false即可、然后浏览器会自动设置content-type并设置boundary

你可能感兴趣的:(chrome,前端,javascript)