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

边栏推荐
- 16、热帖排行
- SQL注入 Less54(限制次数的SQL注入+union注入)
- 【C语言】三子棋(经典解法+一览图)
- MPPT solar charge controller data collection - through the gateway acquisition capacity battery SOC battery voltage, wi-fi
- LeetCode Daily Question 2022/7/25-2022/7/31
- f.grid_sample
- Local area network computer hardware information collection tool
- JetPack组件Databinding
- 10、Redis实现点赞(Set)和获取总点赞数
- Multilingual settings of php website (IP address distinguishes domestic and foreign)
猜你喜欢

【编译原理】递归下降语法分析设计原理与实现

10、Redis实现点赞(Set)和获取总点赞数

Software accumulation -- Screenshot software ScreenToGif

Linux下redis7的安装,启动与停止

C#远程调试

4. Sensitive word filtering (prefix tree)

JS 函数 this上下文 运行时点语法 圆括号 数组 IIFE 定时器 延时器 self.备份上下文 call apply

19.支持向量机-优化目标和大间距直观理解

CorelDRAW2022精简亚太新增功能详细介绍

Maximum area of solar panel od js
随机推荐
【银行系列第一期】中国人民银行
Modbus on AT32 MCU
10 Permission introduction
Unity3D Button mouse hover enter and mouse hover exit button events
The Sad History of Image Processing Technology
基于opencv实现人脸检测
[Android] Room - Alternative to SQLite
工程(五)——小目标检测tph-yolov5
Office automation case: how to automatically generate period data?
LeetCode 每日一题 2022/7/25-2022/7/31
Uninstallation of mysql5.7.37 under CentOS7 [perfect solution]
mycat的主从关系 垂直分库 水平分表 以及mycat分片联表查询的配置详解(mysql5.7系列)
SonarQube的BUG定义
学习DAVID数据库(1)
Installation, start and stop of redis7 under Linux
STM32问题合集
【Bank Series Phase 1】People's Bank of China
什么是分布式锁?实现分布式锁的三种方式
LeetCode Daily Question 2022/7/25-2022/7/31
15. Website Statistics