当前位置:网站首页>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;
}

边栏推荐
猜你喜欢

接口测试关键技术

自动化办公案例:如何自动生成期数据?

The Sad History of Image Processing Technology

What is distributed and clustered?What is the difference?

10. Redis implements likes (Set) and obtains the total number of likes

知识蒸馏7:知识蒸馏代码详解

局域网电脑硬件信息收集工具

学习DAVID数据库(1)

加密公司向盗窃的黑客提供报价:保留一点,把剩下的归还

Maximum area of solar panel od js
随机推荐
8. Unified exception handling (controller notifies @ControllerAdvice global configuration class, @ExceptionHandler handles exceptions uniformly)
遗留系统的自动化策略
STM32问题合集
8、统一处理异常(控制器通知@ControllerAdvice全局配置类、@ExceptionHandler统一处理异常)
跨专业考研难度大?“上岸”成功率低?这份实用攻略请收下!
AtCoder Beginner Contest 261 部分题解
多线程下类对象的服务承诺探讨
What is a distributed lock?Three ways of implementing distributed lock
什么是系统?
Clustering index, and what is the difference between a clustering index
SQL 面试用题(重点)
测试中的误报和漏报同样的值得反复修正
10 Permission introduction
【编译原理】递归下降语法分析设计原理与实现
C#远程调试
Word/Excel fixed table size, when filling in the content, the table does not change with the cell content
Android's webview cache related knowledge collection
YOLOV5 study notes (3) - detailed explanation of network module
php 网站的多语言设置(IP地址区分国内国外)
How to build a private yum source