javascript
SpringMVC实现文件的上传与下载
文件的上傳與下載可以說是工作中經常使用的功能,現在整理一下,希望能夠給大家一個參考。這里以 Maven 的形式來創建項目,相關的配置文件會把主要的內容列出來,其他頭文件信息不再一一全部的列出。最后會把代碼 GitHub 地址貼出來,如果有的小伙伴需要完整的配置信息,可以參考。
一、環境準備
1.1在pom.xml中添加對應的依賴
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.16.RELEASE</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency>1.2在web.xml中配置前端控制器與編碼過濾器
<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 編碼過濾器 --><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>1.3配置SpringMVC的配置文件spring-mvc.xml
SpringMVC 提供了MultipartResolver來實現文件的上傳功能,MultipartResolver是一個接口,實現類有兩個:
SpringMVC 并沒有裝配這兩個實現類,所以需要我們自動配置,這里以CommonsMultipartResolver為例。
二、文件上傳
分析:圖片上傳成功后隨即跳轉到文件下載頁面,為了簡單的實現功能,上傳與下載并沒有與數據庫交互,可以根據需求將文件上傳的路徑存在數據庫中,顯示與下載文件的時候再向數據庫中得到文件所在的路徑。
2.1編寫文件上傳相關的JSP
fileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <html> <header><title>文件上傳</title> </header> <body> <h2>文件上傳</h2><form action="upload" enctype="multipart/form-data" method="post"><table><tr><td>文件描述:</td><td><input type="text" name="description"></td></tr><tr><td>請選擇文件:</td><td><input type="file" name="file"></td></tr><tr><td><input type="submit" value="上傳"></td></tr></table></form> </body> </html>2.2編寫后臺控制器代碼
@RequestMapping("/upload")public String upload(HttpServletRequest request, String description, MultipartFile file) throws Exception {if(!file.isEmpty()) {// 定義文件上傳的路徑String path = request.getServletContext().getRealPath("/images/");// 獲得上傳文件名String fileName = file.getOriginalFilename();File filepath = new File(path, fileName);// 判斷路徑是否存在,如果不存在就創建一個if (!filepath.getParentFile().exists()) {filepath.getParentFile().mkdirs();}// 將上傳文件保存到目標文件中file.transferTo(new File(path + File.separator + fileName));// 將上傳圖片描述信息與文件名保存在轉發域中,用于下載request.setAttribute("description", description);request.setAttribute("fileName", fileName);return "success";} else {return "error";}}(文件上傳完)
2.3上傳分析
在上傳文件的時候使用了MultipartFile對象,SpringMVC 會將上傳的文件綁定在MultipartFile對象中,這個對象提供了一些方法來獲得文件的內容,比如:getOriginalFilename()用于獲得文件名,transferTo(File dest)用于將上傳的文件保存在目的磁盤中。下面是其所提供的方法:
三、文件下載
3.1編寫文件下載相關的JSP
success.jsp文件上傳成功后就會跳轉到該頁面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <html> <head><title>文件下載</title> </head> <body><h2>文件上傳成功!點擊即可下載上傳的文件!</h2><span>${description}</span><a href="download?fileName=${fileName}"> ${fileName}</a> </body> </html>3.2編寫后臺控制器代碼
@RequestMapping(value="/download")public ResponseEntity<byte[]> download(HttpServletRequest request, String fileName)throws Exception {// 獲得下載文件路徑String path = request.getServletContext().getRealPath("/images/");// 對中文文件名進行轉碼fileName = new String(fileName.getBytes("iso-8859-1"),"UTF-8");File file = new File(path + File.separator + fileName);// 文件下載的時候將文件名轉碼成瀏覽器可以識別的 ASCIIString downLoadFileName = new String(fileName.getBytes("utf-8"), "iso-8859-1");HttpHeaders headers = new HttpHeaders();headers.setContentDispositionFormData("attachment", downLoadFileName);headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}(文件下載完)
四、測試上傳與下載
PS:請忽略 tomcat 的端口號,為了方便我改成了80端口,文件下載直接點擊對應的連接即可。
不知道有沒有小伙伴對上傳的路徑感到困惑,文件上傳成功了,但是在當前工程下并沒有保存文件的文件夾,其實是因為項目是通過服務器運行的(這里是 tomcat),上傳的文件并沒有消失,而是被保存在了服務器發布的項目中。
為了防止出現太多的無效代碼,省去了一些類的定義與配置文件的頭信息,如果你需要這些信息,可以到 GitHub 中查看。
GitHub 地址:https://github.com/coderjas/spring-note,springmvc-fileupload2download目錄下是這個 demo 對應的代碼。
參考博文:
https://blog.csdn.net/qian_ch/article/details/69258465
總結
以上是生活随笔為你收集整理的SpringMVC实现文件的上传与下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mvc:default-servlet-
- 下一篇: 五菱荣光1.8变速箱维修后空不了档怎么回