项目场景:
前段提交文件上传的请求,后端利用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)