1.自從Struts 1.2.6版本,就出現了DownloadAction類,主要就是用于處理web應用的下載。
使用DownloadAction也是很簡單的。


2.自定義的
Action繼承DownloadAction

然后實現:getStreamInfo()方法,該方法用于返回文件或者流的信息。

protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response)

可以覆蓋:getBufferSize方法,用于自定義向servletoutput 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進行管理的,非常方便。