axios上传文件错误:Current request is not a multipart request解决

 更新时间:2023年01月06日 10:05:56   作者:obscure mood  
最近工作中使用vue上传文件的时候遇到了个问题,下面这篇文章主要给大家介绍了关于axios上传文件错误:Current request is not a multipart request解决的相关资料,需要的朋友可以参考下

报错信息

其实整个过程我一共经历了三个报错信息,分别是

1.Current request is not a multipart request:当前请求不是multipart 请求

2.the request was rejected because no multipart boundary was found:请求被拒绝,因为未找到多部分边界

3.Required request part ‘files’ is not present

报错产生的程序

我是想在vue中实现一个上传文件的功能,采用axios方式上传,数据模式采用formdata。

然后就产生了各种错误。

错误解决

Current request is not a multipart request:

这个错误是因为后端读取MultipartFile 类型数据时,对申请头的类型进行了一个判断,他只识别 multipart 开头的 Content-Type。所以我们需要修改headers 的 Content-Type。

但是手动添加headers会产生 第二个错误。所以建议使用formdata 的方式,参数为formdata 时,浏览器会自动添加一个标准的headers。

错误:会引发新的错误

var request({
        url: 地址,
        method: 'post',
        headers:{'Content-Type': 'multipart/form-data'},
        data: formdata,
    })

正确:

	let format = new window.FormData();
	format.append("file",files[0].raw)
	let res = await api.test(format)
	var options({
	        url: 地址,
	        method: 'post',
	        data: formdata,
	    })
	axios(options).then((res) => {console.log(res)})

当然要保证format的key要和后端接收参数的名称保持一致,不然会引发第三个错误。
(对了,正常 let format = new FormData();就可以,但一些vue情况下可能会报错找不到FormData ,就可以试试new window.FormData();)

新的问题

正常情况下此时浏览器会自动修改headers的Content-Type,但是我的请求头的类型依旧没有变化,经过进一步研究,发现axios在请求发送出去之前会进行一次拦截,自动给我们的请求设置一些参数。所以我们需要修改一下不让它在修改。最重结果为

	let format = new window.FormData();
	format.append("file",files[0].raw)
	let res = await api.test(format)
	var options({
	        url: 地址,
	        method: 'post',
	        data: formdata,
	         transformRequest: [function(data, headers) {
            // 去除post请求默认的Content-Type
            delete headers.post['Content-Type']
            return data
          }],
	    })
	axios(options).then((res) => {console.log(res)})

2.the request was rejected because no multipart boundary was found

这是因为正常的 Content-Type是这样的

Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywdz99kUqBwK48chO

后面会有一个自动生成的boundary来作为分隔符,而人工写的是没有的,也很难人工生成。
所以如果想使用multipart/form-data 的话,建议不要人工添加,使用FormData 是较好的办法。

3.Required request part ‘files’ is not present

这个问题有很多可能性,其中最常见的就是

public void upload(@RequestParam("files") MultipartFile file) throws Exception {
	System.out.println(file.getOriginalFilename());
}
let format = new window.FormData();
	format.append("file",files[0].raw)

后端接受文件的名称和前端formdata的key键不相同,修改为相同就好。

其他还有可能是前端传参问题,参数可能并没有传送到后端,或者也可能是因为Content-Type的不同导致读取文件方式不同。

我产生这个报错是因为Content-Type 不是’multipart/form-data’ ,但是无法通过RequestParam方法获得formdata中的数据(接收和传入的参数不是文件类型)。

总结

到此这篇关于axios上传文件错误:Current request is not a multipart request解决的文章就介绍到这了,更多相关axios上传文件错误内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ElementUI Tag组件实现多标签生成的方法示例

    ElementUI Tag组件实现多标签生成的方法示例

    这篇文章主要介绍了ElementUI Tag组件实现多标签生成的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Vue脚手架学习之项目创建方式

    Vue脚手架学习之项目创建方式

    这篇文章主要给大家介绍了关于Vue脚手架学习之项目创建方式的相关资料,文中通过介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Vue子组件调用父组件方法案例详解

    Vue子组件调用父组件方法案例详解

    这篇文章主要介绍了Vue子组件调用父组件方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Vue后台中优雅书写状态标签的方法实例

    Vue后台中优雅书写状态标签的方法实例

    在Vue中,我们可以非常便捷地通过标签实现状态的保存,这篇文章主要给大家介绍了关于Vue后台中如何优雅的书写状态标签的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 基于vue.js中事件修饰符.self的用法(详解)

    基于vue.js中事件修饰符.self的用法(详解)

    下面小编就为大家分享一篇基于vue.js中事件修饰符.self的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • vue-cli 打包后提交到线上出现

    vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报

    这篇文章主要介绍了vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • vue封装实现自动循环滚动的列表

    vue封装实现自动循环滚动的列表

    在做数据大屏开发的过程中,经常出现需要对列表进行自动滚动的需求,所以本文就来为大家介绍一下如何利用vue封装一个自动循环滚动的列表吧
    2023-09-09
  • vue-router解决相同路径跳转报错的问题

    vue-router解决相同路径跳转报错的问题

    这篇文章主要介绍了vue-router解决相同路径跳转报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue3学习之事件处理详解

    Vue3学习之事件处理详解

    Vue事件处理是每个Vue项目的必要方面。 它用于捕获用户输入,共享数据以及许多其他创造性方式。本文将通过简单的示例为大家讲解了Vue3中事件处理的使用,需要的可以参考一下
    2022-12-12
  • Vue之Computed依赖收集与更新原理分析

    Vue之Computed依赖收集与更新原理分析

    这篇文章主要介绍了Vue之Computed依赖收集与更新原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论