Multipartfile 在文件上传时为空

项目场景:

前段提交文件上传的请求,后端利用spring的MultipartFile对 上传的文件进行保存


问题描述:

前段提交的请求正常进入控制器中,但是MultipartFile 为空,调试情况如下

前段代码如下


原因分析:

文件上传,请求已成功进入控制器,只是multipartFile没有被成功创建,既然如此,那么他又是如何根据信息进行创建的呢?

首先,请求进入后,必定是要由dispatcherservlet 进行请求处理,其中包括了对请求类型进行判断,然后选择相应的适配器等一系列操作,

如果是multipart类型的话,将会队请求进行解析,源码如下:

而请求中包括原来文件选择框的 name 属性也会在请求数据当中,解析后被进行封装,而关键便在于此

在诸多参数当中,multipart便是需要根据这个fieldName (其值其实就是由input标签 name属性值解析而来)进行区分,要么和multipartfile 变量名一致,要么利用 @RequestPara进行制定,那如果不一样,就会发生上图中file为空的情形


解决方案:

  • 解决办法一:

              将multipartfile 变量名 修改为imput name属性的值

public String upload( MultipartFile file_upload, HttpServletRequest request) {
  • 解决办法二

              利用   @RequestParam 进行绑定

public String upload(@RequestParam(value = "file_upload") MultipartFile file, HttpServletRequest request)

 

问题: 文件上传MultipartFile参数无法获取到值,可能出现的原因和解决方法是什么? 回答: 有几种可能导致文件上传时无法获取到MultipartFile参数的值。首先,可能是前后端参数名对应不一致,需要确认参数名是否一致。其次,如果在配置文件中指定了文件上传时的大小值,可能会导致文件上传失败,可以尝试关闭文件上传支持,即将配置spring.servlet.multipart.enabled设置为false。另外,如果切换了内嵌容器从tomcat到undertow,需要检查undertow的配置是否正确。此外,如果指定了临时文件站的路径但路径不存在,也可能导致文件上传失败。还有可能是多次读取HttpServletRequest流导致MultipartFile参数值为空,需要确保只读取一次HttpServletRequest流。如果使用了Spring Boot,已经有CommonsMultipartResolver,可能需要排除原有的Multipart配置,可以使用@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})来排除。最后,如果以上解决方法都无效,可能需要添加以下依赖解决问题:commons-io和commons-fileupload。可以在pom.xml文件中添加如下依赖: ``` <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> ```<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [解决SpringBoot2.3.3版本文件上传MultipartFile为空值问题](https://blog.csdn.net/qq_38225558/article/details/108423264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值