Spring MVC文件上傳與下載

文件上傳

多數文件上傳都是通過表單形式提交給後臺服務器的,因此,要實現文件上傳功能,就需要提供一個文件上傳的表單,而該表單必須滿足以下3個條件:

  1. form表單的method屬性設置爲post
  2. form表單的enctype屬性設置爲multipart/form-data;(此時瀏覽器就會採用二進制流來處理表單數據,服務器端就會對文件上傳的請求進行解析處理。)
  3. 提供<input type="file" name="filename" />的文件上傳輸入框。

Spring MVC通過MultipartResolver實現文件上傳功能(不需要通過第三方組件來實現文件上傳)。MultipartResolver是一個接口對象,需要通過它的實現類CommonsMultipartResolver來完成文件上傳工作。
MultipartResolver配置示例如下:

<bean id="multipartResolver"          	     
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
             <property name="defaultEncoding" value="UTF-8" />//設置請求編碼格式,必須與JSP中的pageEncoding屬性一致,默認爲ISO-8859-1
             <property name="maxUploadSize" value="2097152" />//設置允許上傳文件的最大值(2M),單位爲字節
             ...
     </bean>

通過<property>元素可以對文件解析器類CommonsMultipartResolver的如下屬性進行配置:

  1. maxUploadSize:上傳文件最大長度(以字節爲單位);
  2. maxInMemorySize:緩存中的最大尺寸
  3. defaultEncoding:默認編碼格式;
  4. resolveLazily:推遲文件解析,以便在Controller中捕獲文件大小異常。

注意:因爲MultipartResolver接口的實現類CommonsMultipartResolver內部是引用multipartResolver字符串獲取該實現類對象並完成文件解析的,所以在配置CommonsMultipartResolver時必須指定該Bean的id爲multipartResolver

需要導入的jar包
commons-fileupload-1.3.2.jar
commons-io-2.5.jar
org.springframework.web.multipart.MultipartFile接口中提供了獲取上傳文件、文件名稱等方法,如下表所示:
在這裏插入圖片描述

文件下載

文件下載就是將文件服務器中的文件下載到本機上。在Spring MVC環境中,實現文件下載大致可分爲如下兩個步驟:
1.客戶端頁面使用一個文件下載的超鏈接

<a href="${pageContext.request.contextPath }/download?filename=1.jpg">
     文件下載 
</a>

2.在後臺使用Spring MVC提供的ResponseEntity類型對象完成文件下載,使用它可以很方便的定義返回的結果對象(HttpHeaders對象和HttpStatus對象),通過對這兩個對象的設置,即可完成下載文件時所需的配置信息。

  • 響應頭信息中的MediaType代表的是Interner Media Type(即互聯網媒體類型),也叫做MIME類型,MediaType.APPLICATION_OCTET_STREAM的值爲application/octet-stream,即表示以二進制流的形式下載數據;
  • HttpStatus類型代表的是Http協議中的狀態,示例中的HttpStatus.OK表示200,即服務器已成功處理了請求。

當對中文名稱的文件進行下載時,因爲各個瀏覽器內部轉碼機制的不同,就會出現不同的亂碼以及解析異常問題。爲了解決瀏覽器中文件下載時中文名稱的亂碼問題,可以在前端頁面發送請求前先對中文名進行統一編碼,然後在後臺控制器類中對文件名稱進行相應的轉碼。

在下載頁面中對中文文件名編碼。可以使用Servlet API中URLEncoder.encoder(String s, String enc)方法將中文轉爲UTF-8編碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章