使用MultipartFile上傳文件

轉載地址:https://www.cnblogs.com/lunaticcoder/p/9813483.html(具體的看這個這個大佬的博客)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格式來發送接收。web

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

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。(僅能夠選擇文件夾,文件夾內的文件也能成功上傳)mvc

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>

後端代碼app

單文件上傳dom

 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     }

多文件上傳jsp

 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文件配置以下post

 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

相關文章
相關標籤/搜索