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


2.自定義的
Action繼承DownloadAction

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

protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response)

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