2011年9月25日 星期日

Struts 教學 - 檔案下載

在 Struts 架構下要實現檔案下載時,程式的 Action 不能實做 org.apache.struts.action.Action 介面

而是必須實做  org.apache.struts.actions.DownloadAction   並實現  getStreamInfo() method


如果你想要自行設定緩衝大小的話  你也可以覆寫 getBufferSize() method 


而 Strust 預設的緩衝大小為 4096


接著來介紹兩種不同的做法來實現 Strust 的檔案下載  同樣都是 implements DownloadAction


1.  FileStreamInfo 
     主要是針對主機上的檔案


2.  ResourceStreamInfo
     主要是針對你的 Web AP 的路徑下的檔案


以下個別來看看他的範例


import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction;
// 此範例展示下載一個本地端的 PDF 檔
public class FileDownloadAction extends DownloadAction{

    protected StreamInfo getStreamInfo(ActionMapping mapping, 
                                       ActionForm form,
                                       HttpServletRequest request, 
                                       HttpServletResponse response)
            throws Exception {
        
        String contentType = "application/pdf";
        File file  = new File("c:\\class/pdf");

        return new FileStreamInfo(contentType, file);   //FileStreamInfo
        
    }

}


import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction;
// 此範例展示下載一個web ap 的 PDF 檔
public class ExampleResourceDownload extends DownloadAction {

    protected StreamInfo getStreamInfo(ActionMapping mapping, 
                                       ActionForm form,
                                       HttpServletRequest request, 
                                       HttpServletResponse response)
            throws Exception {

        String contentType         = "application/pdf";
        String path                = "/file/pdf/class.pdf";
        ServletContext application = servlet.getServletContext();
        
        return new ResourceStreamInfo(contentType, application, path);   //ResourceStreamInfo
        
    }

}
到這邊看到 Struts 在整理下載檔案這部分 其實很簡單 你不需要理會太多的表頭設定 你只需要告訴 Struts 要下載的檔案的 MIME Type 即可

沒有留言:

張貼留言