Web上傳超大文件解決方案


文件上傳下載,與傳統的方式不同,這里能夠上傳和下載10G以上的文件。而且支持斷點續傳。

通常情況下,我們在網站上面下載的時候都是單個文件下載,但是在實際的業務場景中,我們經常會遇到客戶需要批量下載的場景,還有文件夾的下載場景。與傳統業務需求相比,新的業務需求要求更高,難度也更大。但是用戶體驗比傳統應用場景更好,更加符合用戶的實際需求。

 

第一點:系統的配置

第二點:系統路徑的配置,將所有的路徑統一配置,在子頁面只需要引用即可,不需要再反復引用

 

文件初始化服務端處理邏輯

 

文件上傳上處理程序,處理服務器返回的數據信息

 

 2.在Jsp頁面中進行引用該Java類:

\

 

第三點:struts2實現文件的上傳和下載

第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。這兩個文件可以從http://commons.apache.org/下載。

第二步:把form表的enctype設置為:“multipart/form-data“,如下:

Java代碼

下載的參數接收及初始化部分

 

后面便是我們實際的下載邏輯

注:一個表單里的文件域對應Action中三個屬性,分別是文件,文件名,文件類型,命名是固定的,文件名必須表單中的文件域名稱相同(uploadImage),文件名為:文件+FileName,文件類型:文件+ContentType。

 

第四步:將我們的上傳Action配置到struts.xml中。

<action name="upload" class="com.gqy.UploadAction">

      <param name="savePath">/uploadFile</param>

      <result>/success.jsp</result>  </action>

注:指定上傳文件的在服務器上的保存目錄,需要在UploadAction中為定義savePath變量並為其添加相應的setter和getter方法,便於Struts2將/uploadFile值賦給savePath屬性,即要想在UploadAction中使用savePath變量必須在UploadAction定義。

配置文件過濾類型:

<param name="allowTypes">       image/bmp,image/png,image/gif,image/jpeg   </param>

手動配置文件大小限制

<param name="maximumSize">1048576</param>

使用Struts2的文件上傳攔截器實現文件過濾

前台引入全局路徑

前台腳本邏輯部分

前台JS業務邏輯實現部分

Struts2提供了一個文件上傳的攔截器—fileUpload,通過配置該攔截器可以方便實現上傳文件的過濾。

配置fileUpload攔截器時,可以為其指定兩個參數:

§ allowedTypes:指定允許上傳的文件類型,多個文件類型之間以英文逗號(,)隔開。

§ maximumSize:指定允許上傳的文件大小,單位是字節。

提示:通過配置fileUpload攔截器,可以輕松的實現文過濾,當文件過濾失敗后,系統自動轉入input邏輯視圖,因此必須為該Action配置名為input的邏輯視圖,除此之外,還必須顯示地為該Action配置defaultStack的攔截器引用。

當用戶上傳失敗后,需要有一定的提示信息。在Struts2中,使用<s:fielderror/>標簽即可將錯誤提示信息輸出到頁面中。

注:要想使用Struts2錯誤提示信息,則上傳文件的Action類,必須繼承ActionSupport,否則Struts2不會提供輸出錯誤提示信息功能。

我們可以配置資源文件(.properties)來保存輸出給用戶的信息。

struts.messages.eror.file.too.large:當上傳文件大小超過設定的值時,Struts2將輸出該key對應的提示信息。

struts.messages.error.content.type.not.allowed:當上傳文件類型不符合設定的值時,Struts2將輸出該key對應的提示信息。

struts.messages.error.uploading:當上傳文件時出現未知錯誤時,Struts2將輸出該key對應的提示信息。

我們還要將資源文件配置到struts.xml文件中,接下來看看我們的資源文件,已經包含中文了,得把它進行一下轉換再配置到工程中。

在struts.xml中設定資源文件:

<constant name="struts.custom.i18n.resources" value="messages"/>

<constant name="struts.custom.i18n.resources" value="messages_zh_CN"/>

用命令native2ascii  d:\messages.properties d:\messages_zh_CN.properties將原有的資源文件轉換成支持中的。

注:保持國際化,資源文件的名稱后綴為: *_zh_CN+文件擴展名的形式。

對於多個文件上傳的原理同上,但是需要注意的是,多個文件域的name屬性名必須相同,而且在Action中應該使用File [] 或者List<File>來接收。

個人覺得用這樣的方式進行多個文件上傳不是很好。

Struts2進行文件下載:

Struts2提供了stream結果類型,該結果類型專門用於支持文件下載的功能。當指定stream結果類型時,需要配置一個inputName參數,該參數指定了一個輸入流,這個輸入流是被下載文件的入口(即通過該入口才能實現文件以流的方式實現下載)。

后端代碼邏輯大部分是相同的,目前能夠支持MySQL,Oracle,SQL。在使用前需要配置一下數據庫,可以參考我寫的這篇文章:http://blog.ncmem.com/wordpress/2019/11/14/web%e4%b8%8a%e4%bc%a0%e8%b6%85%e5%a4%a7%e6%96%87%e4%bb%b6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM