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