当前位置:网站首页>MultipartFile file upload
MultipartFile file upload
2022-07-31 03:02:00 【wfsm】
引用:https://www.cnblogs.com/896240130Master/p/6430908.html
springmvc 中,The upload of the file is through
MultipartResolver
实现的,所以,如果要实现文件的上传,只要在spring-servlet.xml
中注册相应的MultipartResovler
MultipartResolver
实现类:
CommonsMultipartResolver
StandardServletMultipartResolver
区别:
第一个需要使用 Apache 的 commons-fileupload
等jar包支持,But can be in the relatively old servlet 版本中使用
The second one does not require a third partyjar包支持,他使用servletBuilt-in upload function,但只能在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>
<!-- The size limit for files in one form submission 10M-->
<max-request-size>10485760</max-request-size>
<!-- The size of the file will be automatically saved to the hard disk, 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()){
// upload to this path
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 . The name passed in by the front end must be the same as 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;
}
边栏推荐
猜你喜欢
19. Support Vector Machines - Intuitive Understanding of Optimization Objectives and Large Spacing
【编译原理】递归下降语法分析设计原理与实现
YOLOV5 study notes (3) - detailed explanation of network module
工程(五)——小目标检测tph-yolov5
10 Permission introduction
11、Redis实现关注、取消关注以及关注和粉丝列表
YOLOV5 study notes (2) - environment installation + operation + training
TCP详解(二)
Discourse Custom Header Links
The use of font compression artifact font-spider
随机推荐
字体压缩神器font-spider的使用
Thesis framework of the opening report
接口测试关键技术
LeetCode 每日一题 2022/7/25-2022/7/31
Crypto Firms Offer Offer To Theft Hackers: Keep A Little, Give The Rest
Modbus on AT32 MCUs
TCP/IP四层模型
QML的使用
Is interprofessional examination difficult?Low success rate of "going ashore"?Please accept this practical guide!
Mycat's master-slave relationship, vertical sub-database, horizontal sub-table, and detailed configuration of mycat fragmented table query (mysql5.7 series)
遗留系统的自动化策略
LeetCode简单题之两个数组间的距离值
The principle of complete replication of virtual machines (cloud computing)
Difference between CMOS and TTL?
15. Website Statistics
点云DBSCAN聚类(MATLAB,非内置函数)
[Godot][GDScript] 二维洞穴地图随机生成
JS 函数 this上下文 运行时点语法 圆括号 数组 IIFE 定时器 延时器 self.备份上下文 call apply
CentOS7下mysql5.7.37的安装【完美方案】
5. SAP ABAP OData 服务如何支持 $filter (过滤)操作