当前位置:网站首页>MultipartFile文件上传
MultipartFile文件上传
2022-07-31 02:58:00 【wfsm】
引用:https://www.cnblogs.com/896240130Master/p/6430908.html
springmvc 中,文件的上传是通过
MultipartResolver实现的,所以,如果要实现文件的上传,只要在spring-servlet.xml中注册相应的MultipartResovler
MultipartResolver实现类:
CommonsMultipartResolverStandardServletMultipartResolver
区别:
第一个需要使用 Apache 的 commons-fileupload 等jar包支持,但能在比较旧的 servlet 版本中使用
第二个不需要第三方jar包支持,他使用servlet内置的上传功能,但只能在servlet3 以上版本使用
引入 CommonsMultipartResolver
在spring-servlet.xml 中 引入 CommonsMultipartResolver 的bean
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
<property name="maxUploadSize" value="10485760000" />
<property name="maxInMemorySize" value="40960"/>
</bean>
引入StandardServletMultipartResolver
在spring-servlet.xml 中引入 StandardServletMultipartResolver 的bean
<bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver" name="multipartResolver">
</bean>
在 web.xml中 添加 multipart-config 配置
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<!-- 上传文件的大小限制 5M-->
<max-file-size>5242880</max-file-size>
<!-- 一次表单提交中文件的大小限制 10M-->
<max-request-size>10485760</max-request-size>
<!-- 多大的文件会被自动保存到硬盘上, 0 代表所有-->
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
代码:
jar包:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
@RestController
public class HelloController {
@PostMapping("/upload")
public String hello(HttpServletRequest request){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
System.out.println(multipartResolver.isMultipart(request));
// 判断是否有文件上传
if (multipartResolver.isMultipart(request)){
// 获取MultipartHttpServletRequest
MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);
// MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 获取request中 所有文件名
Iterator<String> iterator = multiRequest.getFileNames();
while (iterator.hasNext()){
MultipartFile file = multiRequest.getFile(iterator.next());
if (!file.isEmpty()){
// 上传到这个路径
String path = "F:\\images";
String fileName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString()+fileName.substring(fileName.lastIndexOf("."));
File targetFile = new File(path, newName);
try {
file.transferTo(targetFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return "success";
}
@PostMapping("/upload02")
public String upload(MultipartFile[] files,HttpServletRequest request) throws IOException {
if (files != null && files.length>0){
for (MultipartFile file : files) {
System.out.println("文件流"+file.getInputStream());
System.out.println("文件字节大小"+file.getSize());
System.out.println("文件类型"+file.getContentType());
System.out.println("文件数据:"+file.getBytes());
System.out.println(file.getName());
System.out.println(file.getOriginalFilename());
// servletContext.getRealPath("/")
String filePath = request.getSession().getServletContext().getRealPath("/")+"assets";
File dir = new File(filePath);
if (!dir.exists()){
dir.mkdirs();
}
String fileUrl = filePath +File.separator+ file.getOriginalFilename();
file.transferTo(new File(fileUrl));
}
}
return "hehe";
}
}
遇到的问题
postman发送 带file的请求

MultipartFile 为null
解决: 1. 没有注入bean ,CommonsMultipartResolver或者StandardServletMultipartResolver,
2 . 前端传入的名字必须和 MultipartFile 的名字相同request 转 MultipartHttpServletRequest 报错
解决:multipartResolver.resolveMultipart(request)// 获取MultipartHttpServletRequest MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);引用:https://blog.csdn.net/MTone1/article/details/83826124
springboot中使用 CommonsMultipartResolver
默认引入的是StandardServletMultipartResolver
注入CommonsMultipartResolver
@Bean
CommonsMultipartResolver commonsMultipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("utf-8");
multipartResolver.setResolveLazily(true);
multipartResolver.setMaxInMemorySize(40960);
// 上传文件大小 50M : 50*1024*1024
multipartResolver.setMaxUploadSize(50*1024*1024);
return multipartResolver;
}

边栏推荐
猜你喜欢
随机推荐
Classic linked list OJ strong training problem - fast and slow double pointer efficient solution
Moxa NPort device flaw could expose critical infrastructure to devastating attack
The Sad History of Image Processing Technology
全流程调度——MySQL与Sqoop
2022牛客多校联赛第四场 题解
Crypto Firms Offer Offer To Theft Hackers: Keep A Little, Give The Rest
f.grid_sample
Thesis framework of the opening report
JetPack组件Databinding
Installation, start and stop of redis7 under Linux
Refuse to work overtime, a productivity tool set developed by programmers
分布式与集群是什么 ? 区别是什么?
SQL 面试用题(重点)
多线程下类对象的服务承诺探讨
Chapter 9 SVM Practice
STM32CUBEMX develops GD32F303 (11) ---- ADC scans multiple channels in DMA mode
6. Display comments and replies
Project (5) - Small target detection tph-yolov5
Mathematics to solve the problem - circular linked list
Face detection based on opencv









