解决springboot上传文件时MultipartFilenull问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解决springboot上传⽂件时MultipartFilenull问题
在接⼿其他同事的项⽬时,为系统加⼊⽂件上传功能,出现的问题。

后论坛中论坛中找到解决办法,是引⽤ commons-fileupload查看,重写multipartResolver实现⽂件上传,因为其他系统⽆需特殊配置就可以实现⽂件上传,所有继续寻找问题根源,发现项⽬中dispatcherRegistration配置引起的问题
项⽬版本信息如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
⽂件上传⼤⼩限制配置
spring.servlet.multipart.max-request-size=100MB
spring.servlet.multipart.max-file-size=100MB
⽂件上传前端使⽤的layui的上传插件,具体代码如下
function initUpdataPdf() {
e(['form', 'element', 'table', 'layer', 'laydate', 'upload'], function () {
var form, element, layer;
form = layui.form
, element = layui.element
, table = layui.table
, layer = yer
, upload = layui.upload;
var $ = layui.jquery
var uploadInst = upload.render({
elem: '#addPdfButton'
, url: contextPath + 'documents/uploadPdf'
, accept: 'file' //只允许pdf⽂件
, acceptMime: 'file/pdf' //只允许pdf⽂件
, size: 100 * 1024 //限制⽂件⼤⼩,单位 KB
, field: 'file'
, before: function (obj) {
//预读本地⽂件⽰例,不⽀持ie8
obj.preview(function (index, file, result) {
layer.msg('上传中...', {icon: 16, shade: [0.5, '#f5f5f5'], scrollbar: false, time: 100000});
});
}
, done: function (res) {
layer.closeAll()
//如果上传失败
if (isNotEmpty(res) && isNotEmpty(res.code) && res.code == 0) {
layer.msg('上传成功!');
initPagination();
} else {
return layer.msg('上传失败');
}
}
});
form.render();
});
}
后台Controller ⽂件接收代码
@PostMapping("/attInfo/uploadPdf")
@ResponseBody
public Map uploadPdf(@RequestParam("file") MultipartFile file) {
Map<String, Object> map = new HashMap<>();
map.put("code", 0);
map.put("msg", "");
Integer code = 0;
String msg = "";
String name = file.getOriginalFilename();
File fileBean = new File(fileBasePathProperties.getTmpFileBasePath() + name);
String id = "";
try {
file.transferTo(fileBean);
id = saveProductsAttInfo.getAttId();
map.put("code", 0);
} catch (IOException e) {
map.put("code", 1);
map.put("msg", "保存错误");
e.printStackTrace();
}
map.put("id", id);
map.put("name", name);
return map;
}
解决办法 1:取⾃⽹络
第⼀步:在pom.xml中加⼊以下代码
<!-- https:///artifact/commons-fileupload/commons-fileupload --> <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https:///artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
第⼆步:加⼊配置类
@Configuration
public class UploadConfig {
//显⽰声明CommonsMultipartResolver为mutipartResolver
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
//resolveLazily属性启⽤是为了推迟⽂件解析,以在在UploadAction中捕获⽂件⼤⼩异常
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
//上传⽂件⼤⼩ 50M 50*1024*1024
resolver.setMaxUploadSize(50 * 1024 * 1024);
return resolver;
}
}
第三步:在启动类上修改注解
@SpringBootApplication(exclude={MultipartAutoConfiguration.class})
解决办法 2
我的项⽬中去掉以下配置即可,若没有以下配置,需要⾃⾏查找servlet相关的配置@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
registration.addUrlMappings("/*");
return registration;
}。

相关文档
最新文档