首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Struts2 文件上傳下載完整實現:表單封裝、Action 處理、Stream 結果類型配置

     編輯:Java 綜合教學

Struts2 文件上傳與下載全流程實戰

Struts2 內建對 Commons FileUpload 的支持,配合 Stream 結果類型實現文件下載。本文提供完整可運行代碼。

一、文件上傳

1. 依賴 Jar

  • commons-fileupload-x.x.x.jar
  • commons-io-x.x.x.jar

2. 上傳頁面 (upload.jsp)

<s:form action="upload" enctype="multipart/form-data" method="post">
    <s:textfield name="title" label="標題"/>
    <s:file name="upload" label="選擇文件"/>
    <s:submit value="文件上傳"/>
</s:form>

3. UploadAction 處理類

public class UploadAction extends ActionSupport {
    private File upload;               // 上傳文件
    private String uploadContentType;  // 文件類型
    private String uploadFileName;     // 原始文件名
    private String savePath;           // 保存相對路徑,由 struts.xml 注入

    public String execute() throws Exception {
        byte[] buffer = new byte[1024];
        FileInputStream fis = new FileInputStream(upload);
        FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + uploadFileName);
        int len;
        while ((len = fis.read(buffer)) > 0) fos.write(buffer, 0, len);
        fis.close(); fos.flush(); fos.close();
        return SUCCESS;
    }

    public String getSavePath() {
        return ServletActionContext.getServletContext().getRealPath(savePath);
    }
    // getter/setter 省略
}

4. struts.xml 配置

<action name="upload" class="cn.happy.action.UploadAction">
    <param name="savePath">/upload</param>
    <result name="success">upload_success.jsp</result>
</action>

5. 成功頁面顯示信息

您所上傳的文件是:<s:property value="uploadFileName"/>
文件類型:<s:property value="uploadContentType"/>
文件路徑:<s:property value="savePath"/>

二、文件下載

1. 下載頁面 (download.jsp)

<a href="download?fileName=007.jpg">點擊此處下載文檔</a>

2. FileDownAction

public class FileDownAction extends ActionSupport {
    private String inputPath;   // 文件目錄,struts.xml 注入
    private String fileName;    // 請求參數 fileName

    public InputStream getInputStream() throws FileNotFoundException {
        String path = ServletActionContext.getServletContext().getRealPath(inputPath);
        return new BufferedInputStream(new FileInputStream(path + "\\" + fileName));
    }
    // execute 返回 SUCCESS,getter/setter 省略
}

3. struts.xml Stream 結果類型配置

<action name="download" class="cn.happy.action.FileDownAction">
    <param name="inputPath">/upload</param>
    <result name="success" type="stream">
        <param name="contentType">application/octet-stream</param>
        <param name="inputName">inputStream</param>
        <param name="contentDisposition">attachment;filename="${fileName}"</param>
        <param name="bufferSize">4096</param>
    </result>
</action>

4. 常見 Content-Type 對照表

文件類型Content-Type
Wordapplication/msword
Excelapplication/vnd.ms-excel
PPTapplication/vnd.ms-powerpoint
圖片image/gif, image/jpeg, image/png
文本text/plain
HTMLtext/html
二進制/未知application/octet-stream

三、總結

  • 上傳:enctype="multipart/form-data" + <s:file> + Action 三屬性(文件、類型、文件名)。
  • 下載:Action 提供 InputStream + type="stream" 結果 + contentDisposition 設置下載文件名。
  • 中文文件名需處理編碼(Struts2 2.5+ 自動處理,舊版需自定義)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved