上傳文件html
1、方式一java
1.上傳頁面git
upLoadPage.htmlgithub
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"/> 5 <title>Title</title> 6 </head> 7 <body> 8 <h1>Thymeleaf</h1> 9 <form action="upload" method="post" enctype="multipart/form-data"> 10 選擇圖片:<input type="file" name="file" accept="image/*"/><br/> 11 <input type="submit" value="上傳"/> 12 </form> 13 </body> 14 </html>
<1>. method="post" 是必須的
<2>. enctype="multipart/form-data" 是必須的,表示提交二進制文件
<3>. name="file" 是必須的,和後續服務端對應
<4>. accept="image/*" 表示只選擇圖片web
2.上傳文件頁面跳轉控制器,用來跳轉到上傳頁面。spring
1 @RequestMapping("upLoadPage") 2 public String uploadPage(){ 3 return "upLoadPage"; 4 }
3.上傳文件控制器,用來上傳文件,並跳轉到顯示頁面。apache
1 @RequestMapping(value = "/upload",method = RequestMethod.POST) 2 public String upload(HttpServletRequest request, @RequestParam("file")MultipartFile file, Model model){ 3 4 try { 5 String fileName=System.currentTimeMillis()+file.getOriginalFilename(); 6 String destFileName=request.getServletContext().getRealPath("")+"uploaded"+File.separator+fileName; 7 File destFile=new File(destFileName); 8 destFile.getParentFile().mkdirs(); 9 file.transferTo(destFile); 10 //System.out.println(destFileName); 11 model.addAttribute("fileName",fileName); 12 }catch (FileNotFoundException e){ 13 e.printStackTrace(); 14 return "上傳失敗,"+e.getMessage(); 15 }catch (IOException e){ 16 e.printStackTrace(); 17 return "上傳失敗,"+e.getMessage(); 18 } 19 return "showImage"; 20 }
<1>. 接受上傳的文件api
<2>. 根據時間戳建立新的文件名,這樣即使是第二次上傳相同名稱的文件,也不會把第一次的文件覆蓋了瀏覽器
<3>. 經過req.getServletContext().getRealPath("") 獲取當前項目的真實路徑,而後拼接前面的文件名tomcat
<4>. 第一次運行的時候,這個文件所在的目錄每每是不存在的,這裏須要建立一下目錄
<5>. 把瀏覽器上傳的文件複製到但願的位置
<6>. 把文件名放在model裏,以便後續顯示用
4.顯示頁面
showImage.html
1 <!DOCTYPE html> 2 <html lang="en" xmlns:th="http://www.thymeleaf.org"> 3 <head> 4 <meta charset="UTF-8"/> 5 <title>Title</title> 6 </head> 7 <body> 8 <img th:src="@{/uploaded/{filename}(filename=${fileName})}"/> 9 </body> 10 </html>
5.application.properties
1 #spring.mvc.view.prefix=/WEB-INF/jsp/ 2 #spring.mvc.view.suffix=.jsp 3 spring.http.multipart.max-file-size=10MB 4 spring.http.multipart.max-request-size=10MB 5 6 spring.thymeleaf.enabled=true 7 8 server.port=5050
設置上傳文件的大小,默認是1m,過小了,文件稍微大一點就會出錯。修改端口,啓用thymeleaf模板
6.測試
文件的存儲路徑:
2、方式二(將文件保存在項目目錄下)
1.在pom.xml增長依賴,使項目支持JSP。
1 <!-- servlet依賴. --> 2 <dependency> 3 <groupId>javax.servlet</groupId> 4 <artifactId>javax.servlet-api</artifactId> 5 6 </dependency> 7 <dependency> 8 <groupId>javax.servlet</groupId> 9 <artifactId>jstl</artifactId> 10 </dependency> 11 <dependency> 12 <groupId>org.apache.tomcat.embed</groupId> 13 <artifactId>tomcat-embed-jasper</artifactId> 14 </dependency>
2.在main目錄下,新建-> webapp/WEB-INF/jsp 目錄,用來存放視圖。webapp存放視圖和資源(上傳的文件)
3.showImage.jsp、upLoadPage.jsp中的內容直接把html中的複製過來便可。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 4 <img src="/uploaded/${fileName}">
4.application.properties中添加對jsp視圖的解析路徑,並將thymeleaf模板關閉。
1 spring.mvc.view.prefix=/WEB-INF/jsp/ 2 spring.mvc.view.suffix=.jsp
4.spring.thymeleaf.enabled=false
5.測試
上傳文件所在位置: