struts2自帶有文件下載的功能。本文講述的是,從Oracle中讀取BLOB類型的文件,並轉換成文件。為什麼會選擇把文件以BLOB類型存在數據庫中呢?Boss說,這樣保證了數據安全,不容易被竊取。
struts2文件上傳(保存為BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm
Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm
Struts2實現ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm
遇到的Struts2文件下載亂碼問題 http://www.linuxidc.com/Linux/2014-03/98990.htm
Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm
Struts2 注解模式的幾個知識點 http://www.linuxidc.com/Linux/2013-06/85830.htm
貼出代碼:
struts2.xml文件
<!-- 簡單文件下載 -->
<action name="download" class="web.DownloadAction">
<!-- 注意type="stream" -->
<result name="success" type="stream">
<!-- 保證文檔的中文標題不亂碼,必須這樣做,在Java代碼中是將標題轉換成了ISO8859-1 -->
<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
<!-- 獲得的文件流 -->
<param name="inputName">downloadFile</param>
<!-- 這個是獲得的文件名 -->
<param name="contentDisposition">attachment;filename="${title}"</param>
<!-- 這個是輸出流的大小,這裡是從Java文件中獲得的文件的大小 -->
<param name="bufferSize">${size}</param>
</result>
</action>
DownloadAction.java
private int id;
private String title;
private int size;
ResultDao rDao = new ResultDao();
// 根據id,從數據庫獲取指定的文件
public InputStream getDownloadFile() throws Exception {
// 獲取文件流
return new ByteArrayInputStream(rDao.findFileById(id));
}
public String execute() throws Exception {
Result r = rDao.findResultById(id);
title = new String(r.getTitle().getBytes(), "ISO8859-1");// 從數據庫中獲取文件的標題
size = getDownloadFile().available();// 獲取文件的大小
return SUCCESS;
}
public void setTitle(String title) {
this.title = title;
}
public void setSize(int size) {
this.size = size;
}
public void setId(int id) {
this.id = id;
}
前台jsp代碼
<!-- 需要傳指定的id -->
<a href="download.action?id=<s:property value="#r.id" />" target="_blank">下載資料</a>
<!-- target="_blank"必須要,也就是從新的頁面打開這個下載鏈接的意思,原因是:有些浏覽器下載完成後會自動關閉當前頁,用戶當然不會希望我下載完東西之後就把之前的頁面給關閉了 -->
Struts 的詳細介紹:請點這裡
Struts 的下載地址:請點這裡