日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC实现文件的上传与下载

發(fā)布時(shí)間:2024/9/30 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC实现文件的上传与下载 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文件的上傳與下載可以說是工作中經(jīng)常使用的功能,現(xiàn)在整理一下,希望能夠給大家一個(gè)參考。這里以 Maven 的形式來創(chuàng)建項(xiàng)目,相關(guān)的配置文件會(huì)把主要的內(nèi)容列出來,其他頭文件信息不再一一全部的列出。最后會(huì)把代碼 GitHub 地址貼出來,如果有的小伙伴需要完整的配置信息,可以參考。

一、環(huán)境準(zhǔn)備

1.1在pom.xml中添加對(duì)應(yīng)的依賴

<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來實(shí)現(xiàn)文件的上傳功能,MultipartResolver是一個(gè)接口,實(shí)現(xiàn)類有兩個(gè):

SpringMVC 并沒有裝配這兩個(gè)實(shí)現(xiàn)類,所以需要我們自動(dòng)配置,這里以CommonsMultipartResolver為例。

<!-- 用于自動(dòng)配置 --><mvc:annotation-driven/><!-- 用于處理靜態(tài)資源 --><mvc:default-servlet-handler/><!-- 配置 Spring MVC 掃描的包 --><context:component-scan base-package="com.jas.controller" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 配置試圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean><!-- 配置 CommonsMultipartResolver 的 Bean--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 設(shè)置默認(rèn)的字符編碼 --><property name="defaultEncoding" value="UTF-8"/><!-- 設(shè)置最大的上傳限制,單位是字節(jié) --><property name="maxUploadSize" value="1024000"/></bean>

二、文件上傳

分析:圖片上傳成功后隨即跳轉(zhuǎn)到文件下載頁面,為了簡單的實(shí)現(xiàn)功能,上傳與下載并沒有與數(shù)據(jù)庫交互,可以根據(jù)需求將文件上傳的路徑存在數(shù)據(jù)庫中,顯示與下載文件的時(shí)候再向數(shù)據(jù)庫中得到文件所在的路徑。

2.1編寫文件上傳相關(guān)的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>請(qǐng)選擇文件:</td><td><input type="file" name="file"></td></tr><tr><td><input type="submit" value="上傳"></td></tr></table></form> </body> </html>

2.2編寫后臺(tái)控制器代碼

@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);// 判斷路徑是否存在,如果不存在就創(chuàng)建一個(gè)if (!filepath.getParentFile().exists()) {filepath.getParentFile().mkdirs();}// 將上傳文件保存到目標(biāo)文件中file.transferTo(new File(path + File.separator + fileName));// 將上傳圖片描述信息與文件名保存在轉(zhuǎn)發(fā)域中,用于下載request.setAttribute("description", description);request.setAttribute("fileName", fileName);return "success";} else {return "error";}}

(文件上傳完)

2.3上傳分析

在上傳文件的時(shí)候使用了MultipartFile對(duì)象,SpringMVC 會(huì)將上傳的文件綁定在MultipartFile對(duì)象中,這個(gè)對(duì)象提供了一些方法來獲得文件的內(nèi)容,比如:getOriginalFilename()用于獲得文件名,transferTo(File dest)用于將上傳的文件保存在目的磁盤中。下面是其所提供的方法:

三、文件下載

3.1編寫文件下載相關(guān)的JSP

success.jsp文件上傳成功后就會(huì)跳轉(zhuǎn)到該頁面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <html> <head><title>文件下載</title> </head> <body><h2>文件上傳成功!點(diǎn)擊即可下載上傳的文件!</h2><span>${description}</span><a href="download?fileName=${fileName}"> ${fileName}</a> </body> </html>

3.2編寫后臺(tái)控制器代碼

@RequestMapping(value="/download")public ResponseEntity<byte[]> download(HttpServletRequest request, String fileName)throws Exception {// 獲得下載文件路徑String path = request.getServletContext().getRealPath("/images/");// 對(duì)中文文件名進(jìn)行轉(zhuǎn)碼fileName = new String(fileName.getBytes("iso-8859-1"),"UTF-8");File file = new File(path + File.separator + fileName);// 文件下載的時(shí)候?qū)⑽募D(zhuǎn)碼成瀏覽器可以識(shí)別的 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);}

(文件下載完)

四、測(cè)試上傳與下載

PS:請(qǐng)忽略 tomcat 的端口號(hào),為了方便我改成了80端口,文件下載直接點(diǎn)擊對(duì)應(yīng)的連接即可。

不知道有沒有小伙伴對(duì)上傳的路徑感到困惑,文件上傳成功了,但是在當(dāng)前工程下并沒有保存文件的文件夾,其實(shí)是因?yàn)轫?xiàng)目是通過服務(wù)器運(yùn)行的(這里是 tomcat),上傳的文件并沒有消失,而是被保存在了服務(wù)器發(fā)布的項(xiàng)目中。

為了防止出現(xiàn)太多的無效代碼,省去了一些類的定義與配置文件的頭信息,如果你需要這些信息,可以到 GitHub 中查看。
GitHub 地址:https://github.com/coderjas/spring-note,springmvc-fileupload2download目錄下是這個(gè) demo 對(duì)應(yīng)的代碼。

參考博文:
https://blog.csdn.net/qian_ch/article/details/69258465

總結(jié)

以上是生活随笔為你收集整理的SpringMVC实现文件的上传与下载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。