使用DownloadAction也是很簡單的。
2.自定義的Action繼承DownloadAction。
然后實(shí)現(xiàn):getStreamInfo()方法,該方法用于返回文件或者流的信息。
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
可以覆蓋:getBufferSize方法,用于自定義向servlet的output stream傳輸數(shù)據(jù)的緩沖區(qū)大小(bytes字節(jié)數(shù))。
DownloadAction中有一個內(nèi)部的接口StreamInfo代表著不同流的抽象信息,定義了兩個方法,
public static interface StreamInfo {
public abstract String getContentType();//得到下載文件的MIME類型
public abstract InputStream getInputStream() throws IOException;
}
其中DownloadAction提供了兩個StreamInfo的默認(rèn)實(shí)現(xiàn):
FileStreamInfo 代表從磁盤下載一個文件
ResourceStreamInfo 代表下載一個web應(yīng)用中的一個資源
當(dāng)然,我們自己還可以實(shí)現(xiàn)自己特定的類,比如從數(shù)據(jù)庫中取得流的類,或者從FTP取得文件的流的類。
下面寫一個簡單的覆蓋getStreamInfo的方法,實(shí)現(xiàn)下載Web應(yīng)用的/images/bbg.gif圖片:
public StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
response.setHeader("Content-disposition",
"attachment; filename=" + "bbg2.gif");//設(shè)置文件名稱
StreamInfo si = new ResourceStreamInfo("image/gif",this.servlet.getServletContext(),"/images/bbg.gif");
return si;
}
使用非常方便,而且能夠保持程序一致的結(jié)構(gòu)。原來我開發(fā)的系統(tǒng)中下載都是統(tǒng)一使用Servlet的,由于項目中整合了Spring,所以對于Servlet還需要單獨(dú)的方法來獲取相應(yīng)的服務(wù)層的Bean,使用DownloadAction之后,所有的Action都是由Spring進(jìn)行管理的,非常方便。