使用MultipartFile上传文件

转载地址:https://www.cnblogs.com/lunaticcoder/p/9813483.html(具体的看这个这个大佬的博客)

依赖包:

<!-- 上传文件依赖组件 -->
<!-- 这两个依赖要一起使用-->
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency>

前端在提交的时候也需要修改.form表单提交默认是application/x-www-form-urlencoded而上传文件把文件用2进制的方式传输,默认的格式已经满足不了需求,就需要使用multipart/form-data格式来发送接收。

1. 在form中加入 enctype="multipart/form-data"

1 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
2      <input type="file" name="meFile" /><p>
3      <input type="submit" value="提交" /><p>
4      <input type="reset" value="清空" /><p>
5 </form>

2.上传多文件的话,需在表单的input中加入multiple="multiple"。(可一次选择多个文件)

1 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
2         <input type="file" name="meFile" multiple="multiple" /><p>
3         <input type="submit" value="提交" /><p>
4         <input type="reset" value="清空" /><p>
5 </form>

3.上传文件夹的话,需在表单input中加入webkitdirectory directory。(仅可以选择文件夹,文件夹内的文件也能成功上传)

1 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
2         <input type="file" name="meFile" multiple="multiple" webkitdirectory directory /><p>
3         <input type="submit" value="提交" /><p>
4         <input type="reset" value="清空" /><p>
5 </form>

后端代码

单文件上传

 1 @RequestMapping("/upload_theme.do")//上传主题
 2     public String UploadTheme(MultipartFile meFile,Model model){
 3         if (meFile != null) {
 4             System.out.println(meFile.getContentType());//在控制台打印文件的类型
 5             System.out.println(meFile.getName());//返回文件的名称
 6             System.out.println(meFile.getOriginalFilename());//返回文件的原文件名
 7             try {
 8                 meFile.transferTo(new File("G:/temp/"+UUID.randomUUID()+meFile.getOriginalFilename()));
 9             } catch (IllegalStateException e) {
10                 e.printStackTrace();
11                 model.addAttribute("msg", "上传失败");
12                 return "/error.jsp";
13             } catch (IOException e) {
14                 e.printStackTrace();
15                 model.addAttribute("msg", "上传失败");
16                 return "/error.jsp";
17             }
18         }
19         model.addAttribute("msg", "上传成功");
20         return "index";
21     }

多文件上传

 1 @RequestMapping("/upload_theme.do")//上传主题
 2     public String UploadTheme(HttpServletRequest request,Model model){
 3         CommonsMultipartResolver cResolver = new CommonsMultipartResolver();
 4         if (cResolver.isMultipart(request)) {//判断是不是Multipart格式的数据
 5             MultipartHttpServletRequest httpservletrequest = (MultipartHttpServletRequest) request;//将文件格式的请求装入MultipartHttpServletRequest对象中。
 6             List<MultipartFile> list = httpservletrequest.getFiles("meFile");//通过调用该方法取出文件到list
 7             for (int i = 0; i < list.size(); i++) {
 8                 System.out.println(list.get(i).getOriginalFilename());
 9                 System.out.println(list.get(i).getContentType());
10                 try {
11                     list.get(i).transferTo(new File("G:/temp/"+UUID.randomUUID()+list.get(i).getOriginalFilename()));
12                 } catch (IllegalStateException e) {
13                     e.printStackTrace();
14                     model.addAttribute("msg", "上传失败");
15                     return "/error.jsp";
16                 } catch (IOException e) {
17                     e.printStackTrace();
18                     model.addAttribute("msg", "上传失败");
19                     return "/error.jsp";
20                 }
21             }
22         }
23         model.addAttribute("msg", "上传成功");
24 
25         return "index";
26     }

Spring的xml文件配置如下

 1  <!-- Spring MVC -->
 2    
 3         <!-- 配置组件扫描 -->
 4         <context:component-scan 
 5             base-package="export.controller" />
 6             
 7         <!-- 配置ViewResolver -->
 8         <bean 
 9             class="org.springframework.web.servlet.view.InternalResourceViewResolver">
10             <property name="prefix" 
11                 value="/web/" />
12             <property name="suffix" 
13                 value=".jsp" />
14         </bean>
15         <bean id="multipartResolver"  
16             class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
17             <!-- 上传文件大小上限,单位为字节(10MB) -->
18             <property name="maxUploadSize">  
19                 <value>10485760</value>  
20             </property>  
21             <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
22             <property name="defaultEncoding">
23                 <value>UTF-8</value>
24             </property>
25             </bean>
26         <!-- 注解驱动 -->
27         <mvc:annotation-driven />

以及MultipartFile对象中的常用方法如下:

byte[] getBytes():获取文件数据
String getContentType[]:获取文件MIME类型,如image/jpeg等
InputStream getInputStream():获取文件流
String getName():获取表单中文件组件的名字
String getOriginalFilename():获取上传文件的原名
Long getSize():获取文件的字节大小,单位为byte
boolean isEmpty():是否有上传文件
void transferTo(File dest):将上传文件保存到一个目录文件中

非常感谢@花裤都派大星 原谅我转载了你的帖子

也可以看看这些博客:https://blog.csdn.net/qian_ch/article/details/69258465

          https://www.cnblogs.com/WJ-163/p/6269409.html

posted @ 2018-10-19 11:31  帅的很耗cpu  阅读(27593)  评论(0编辑  收藏  举报