轉載地址: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