Struts2 文件下載(中文處理方法以及控制下載文件名稱和擴展名)

Struts2的框架提供了現成的文件下載方式,大大簡化了開發下載功能的便利性。網上的例子有不少,我把一些你們廣泛比較關注的點,集中一下,給出一個總體方案。javascript

通常咱們照着書本或者網上的列子寫出了一個Demo,都會存在幾個疑問:css

 

1.下載文件的文件名怎麼搞?不搞的話瀏覽器默認名字是提交的action的名字,顯然很差html

2.文件名裏面想搞中文,可是實際上下載文件名出現了亂碼或不顯示中文怎麼搞?java

3.文件的擴展名怎麼搞?好比要下載的文件是word(doc,docx)或者excel(xls,xlsx)怎麼辦?難道讓用戶本身改擴展名,太不友好了吧。web

下面咱們逐個說明。瀏覽器

 

場景:咱們須要下載存放在服務器tomcat中webapp文件夾,對應x項目根目錄下「電子表格.xlsx"文件。即tomcat\webapp\x\電子表格.xlsx文件。tomcat

而且但願用戶下載的名字是「個人電子表格.xlsx」。服務器

首先,如同Struts2框架處理其餘問題同樣,咱們須要有一個標準的action類來對下載請求進行處理。app

Action類:框架

  

Struts.xml的action配置

 

 

看完代碼後的解釋:

1.核心的下載功能是怎麼實現的

 第一,action類裏面提供了InputStream流的對象is,而且在配置文件中,同Struts框架的inputName參數進行了綁定。Strut2利用Servlet原本就有的標準流服務提供給客戶端的瀏覽器進行下載。

  關鍵配置:

  result的type再也不是通常的"dispatcher",而是"stream",代表返回給客戶端的是流對象。一個名字爲"inputName"的param參數表示,你得告訴框架,

action類裏面哪一個參數是要提供下載的InputStream對象。咱們這裏就是is

  

     關鍵代碼:

  InputStream對象 is,而且必須有對應的get方法,否則框架拿不到這個對象。注意大小寫

     

      

  爲is對象賦值,獲得真正文件的流對象。

    

 2.名字怎麼搞?

 這種姿式搞(順便把擴展名和中午字符一併搞了):

   關鍵配置:

  attachment標示告訴瀏覽器是附件,不要打開(有時候下載的文件是txt之類的有些瀏覽器默認自動打開,而不是下載)。

  filename=&{fileName},指定要下載的文件是什麼名字。${fileName}這個通配符加大括號表示,文件的名字不是fileName,而是在

 action類中一個名字叫fileName的參數的值

  關鍵編碼:

  

  因爲瀏覽器在只能識別用ISO8859-1編碼的UTF-8的字符串,因此咱們須要在代碼中把中文的文件名用ISO8859-1再從新編碼一下。這樣就解決了中文問題。

 擴展名怎麼解決?看上面的圖,xlsx擴展名一併同文件名統一處理。下載的文件天然就帶這個擴展名了。

 

以上,文章開頭的三個問題獲得解決。

至於buffersize就不解釋了,全部的流傳輸確定都有緩衝的概念。

有人可能會問,爲何action的配置中,param參數了沒有如<param name="contentType">application/zip</param>這樣的配置。其實這就是html頁面的頭部標記。

我不用是由於:

我不須要呀!由於result的type設置爲stream,讓瀏覽器已經知道了是流文件,再加上contentDisposition把文件名連同連擴展名都搞定了,加上這個頭參數沒啥用。不信能夠加上,隨便設置什麼MIME的頭標記,都不起做用了。

固然,若是每次下載的都是固定名字,配置文件也能夠這樣:

這串文字表明MIME協議(多用途的網際郵件擴充協議;)裏面的xlsx格式。

下面附上MIME經常使用的數據類型對應關係:

.doc     application/msword

.docx   application/vnd.openxmlformats-officedocument.wordprocessingml.document
.rtf       application/rtf
 
.xls     application/vnd.ms-excel application/x-excel
.xlsx    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
 
.ppt     application/vnd.ms-powerpoint
.pptx    application/vnd.openxmlformats-officedocument.presentationml.presentation
 
.pps     application/vnd.ms-powerpoint
.ppsx   application/vnd.openxmlformats-officedocument.presentationml.slideshow
 
.pdf     application/pdf
.swf    application/x-shockwave-flash
.dll      application/x-msdownload
 
.exe    application/octet-stream
.msi    application/octet-stream
.chm    application/octet-stream
.cab    application/octet-stream
.ocx    application/octet-stream
 
.rar     application/octet-stream
.tar     application/x-tar
.tgz    application/x-compressed
.zip    application/x-zip-compressed
.z       application/x-compress
 
.wav   audio/wav
.wma   audio/x-ms-wma
.wmv   video/x-ms-wmv
.mp3 .mp2 .mpe .mpeg .mpg     audio/mpeg
.rm     application/vnd.rn-realmedia
 
.mid .midi .rmi     audio/mid
 
.bmp     image/bmp
.gif     image/gif
.png    image/png
.tif .tiff    image/tiff
.jpe .jpeg .jpg     image/jpeg
 
.txt      text/plain
.xml     text/xml
.html     text/html
.css      text/css
.js        text/javascript
 
.mht .mhtml   message/rfc822

以上

相關文章
相關標籤/搜索