Struts2 文件下載

 

jsp

<body>
  <a href="DownloadAction?fileName=荷花.txt">下載文檔</a> <br />
  <a href="DownloadAction?fileName=荷花.jpg">下載圖片</a> <br />
</body>

fileName帶文件名後綴。瀏覽器

 

 

 

action

public class DownloadAction extends ActionSupport {
    private String fileName;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public InputStream getInputStream(){
        return ServletActionContext.getServletContext().getResourceAsStream("resource/" + fileName);
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
  • 一個String類型的成員變量表示文件名,並提供對應的getter、setter方法
  • 一個獲取輸入流的方法,返回該文件的輸入流。也能夠寫成   new FileInputStream()  。
  • 一個要調用的方法

 

 

 

struts.xml

<action name="DownloadAction" class="action.DownloadAction">
            <result name="success" type="stream">
                <!-- 指定action中獲取輸入流的方法,getInputStream,約定:去掉get,後面部分轉化爲camel寫法 -->
                <param name="inputName">inputStream</param>
                <!-- 設置瀏覽器對此stream(輸入流)的處理方式:保存爲文件,filename指定文件名 -->
                <param name="contentDisposition">attachment;filename=${fileName}</param>
                <!-- 設置緩衝大小,默認單位字節 -->
                <param name="bufferSize">4096</param>
                <!-- 解決中文文件名出錯 -->
                <param name="encode">true</param>
            </result>
</action>

 

 

 

流程分析

  • 瀏覽器向服務器發送請求,將fileName傳遞給action
  • JVM建立action實例,並調用action的setFileName()將瀏覽器傳過來的文件名賦給成員變量fileName,完成成員變量的初始化
  • JVM調用action的execute()來處理瀏覽器的請求,返回SUCCESS,JVM根據struts.xml中的配置,向瀏覽器返回一個輸入流,並告知瀏覽器將此輸入流的數據保存爲指定文件。
相關文章
相關標籤/搜索