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

Struts2 入門教程(七):文件上傳與下載完整實現

     編輯:Java 綜合教學

Struts2 入門教程(七):文件上傳與下載完整實現

一、前言與準備

文件上傳需表單設置 method="post" enctype="multipart/form-data"。Struts2 默認使用 Jakarta Commons FileUpload 組件,需引入:

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

可在 struts.xml 配置最大上傳大小(默認 2MB):

<constant name="struts.multipart.maxSize" value="2097152" />

二、單文件上傳實例

1. 視圖頁面 Upload.jsp

<form action="fileupload" method="post" enctype="multipart/form-data">
  文件標題:<input type="text" name="title"/><br/>
  選擇文件:<input type="file" name="upload"/><br/>
  <input type="submit" value="上傳"/>
</form>

2. Action 類 UploadAction

public class UploadAction extends ActionSupport {
    private String title;
    private File upload;
    private String uploadContentType;
    private String uploadFileName;
    private String savePath; // 通過 DI 注入

    // getter/setter 省略...

    public String getSavePath() {
        return ServletActionContext.getRequest().getRealPath(savePath);
    }

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

3. struts.xml 配置

<action name="fileupload" class="com.Struts2.load.UploadAction">
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">image/jpeg,image/jpg,image/gif,image/png</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
    <param name="savePath">/upload</param>
    <result name="success">succ.jsp</result>
    <result name="input">Error.jsp</result> <!-- 驗證失敗跳轉 -->
</action>

4. 成功頁面 succ.jsp

<img src="<s:property value="'/LearStruts2/upload/'+uploadFileName"/>"/>

5. 錯誤頁面 Error.jsp

<s:fielderror/>

三、多文件上傳

JSP 中多個 <input type="file" name="uploads">,Action 屬性改為數組:

private File[] uploads;
private String[] uploadsContentType;
private String[] uploadsFileName;
// 遍歷數組保存

四、文件下載

1. 視圖 fuledown.jsp

<a href="down.action">圖片下載</a>

2. DownAction

public class DownAction extends ActionSupport {
    private String inputPath, contentType, filename;
    // getter/setter...

    public InputStream getTargetFile() throws Exception {
        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    }
    public String execute() {
        inputPath = "/upload/1.jpg";
        filename = "1.jpg";
        contentType = "image/jpg";
        return SUCCESS;
    }
}

3. struts.xml 配置 stream 類型 result

<action name="down" class="com.Struts2.load.DownAction">
    <result name="success" type="stream">
        <param name="contentType">${contentType}</param>
        <param name="inputName">targetFile</param>
        <param name="contentDisposition">attachment;filename="${filename}"</param>
        <param name="bufferSize">50000000</param>
    </result>
</action>

以上代碼經測試可用,詳細原理解析將在後續補充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved