Struts2文件上傳(基於表單的文件上傳)


•Commons-FileUpload組件
–Commons是Apache開放源代碼組織的一個Java子項目,其中的FileUpload是用來處理HTTP文件上傳的子項目
 
•Commons-FileUpload組件特點
–使用簡單:可以方便地嵌入到JSP文件中,編寫少量代碼即可完成文件的上傳功能
–能夠全程控制上傳內容
–能夠對上傳文件的大小、類型進行控制
 
•需要下載Common-FileUplaod框架地址(當然MyEclipce中Struts2支持里自帶有這兩個包)
–下載commons-fileupload-1.2-bin.zip文件
–解壓后得到commons-fileupload-1.2.jar
 
–下載commons-io-1.3.2-bin.zip文件
–解壓后得到commons-io-1.3.2.jar
 
 

基於表單的文件上傳
 
•注意:上面是基於表單的上傳,在form標簽中有一個必須的屬性值設置:enctype.
 
•如果要做文件上傳功能必須將enctype值設為multipart/form-data.
 
•此外,文件上傳還需要二個JAR文件支持:

 


文件上傳頁面upload.jsp(二選一表單即可)
<%@ taglib uri="/struts-tags" prefix="s"%>

    <body>
        <form action="uploads" method="post" enctype="multipart/form-data">
            文件:
            <input type="file" name="uploadImage">
            <input type="submit" value="提交">
        </form>
        或者(兩個表單二選一即可)
        <s:form action="uploads" method="post" enctype="multipart/form-data">
            <s:file name=“uploadImage " label="選擇上傳的文件" />
            <s:submit value="上傳" />
        </s:form>
    </body>
 
Struts2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <!-- 要注意Struts2默認文件上傳最大為2M即便你設置了<param name="maximumSize">5242880</param>
          當上傳的文件大於2M時候也會出錯的這時要設置,另外一個常量
    <constant name="struts.multipart.maxSize" value="1000000000"/> -->
    
    <package name="Struts2" extends="struts-default" namespace="/">

        <action name="uploads" class="com.struts.UploadAction">

            <!-- 指定(限制)上傳文件的類型,定義局部攔截器,修改默認攔截器的屬性 
                "fileUpload.maximumSize" :限制上傳最大的文件大小。 
                "fileUpload.allowedTypes":允許上傳文件的類型。 
                "fileUpload.allowedExtensions":允許上傳文件的可擴展文件類型。 -->
            <interceptor-ref name="defaultStack">
                <param name="fileUpload.maximumSize">500000000</param>
                <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param>
                <param name="fileUpload.allowedExtensions">.txt,.ppt</param>
            </interceptor-ref>

            <result>/success.jsp</result>
            <!-- 出現錯誤自動會返回input結果,進入結果視圖 -->
            <result name="input" >/error.jsp</result>
        </action>
    </package>
</struts>    

 附加:contentType類型設置

 

上傳Action類UploadAction-簡單的保存文件方式
package com.struts;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

    private File uploadImage; //得到上傳的文件
    private String uploadImageContentType; //得到文件的類型
    private String uploadImageFileName; //得到文件的名稱
    
    public String execute(){
        System.out.println("fileName:"+this.getUploadImageFileName());
        System.out.println("contentType:"+this.getUploadImageContentType());
        System.out.println("File:"+this.getUploadImage());
        
        //獲取要保存文件夾的物理路徑(絕對路徑)
        String realPath=ServletActionContext.getServletContext().getRealPath("/upload");
        File file = new File(realPath);
        
        //測試此抽象路徑名表示的文件或目錄是否存在。若不存在,創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
        if(!file.exists())file.mkdirs();
        
        try {
            //保存文件
            FileUtils.copyFile(uploadImage, new File(file,uploadImageFileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SUCCESS;
    }

    public File getUploadImage() {
        return uploadImage;
    }

    public void setUploadImage(File uploadImage) {
        this.uploadImage = uploadImage;
    }

    public String getUploadImageContentType() {
        return uploadImageContentType;
    }

    public void setUploadImageContentType(String uploadImageContentType) {
        this.uploadImageContentType = uploadImageContentType;
    }

    public String getUploadImageFileName() {
        return uploadImageFileName;
    }

    public void setUploadImageFileName(String uploadImageFileName) {
        this.uploadImageFileName = uploadImageFileName;
    }
    
}

上傳成功頁面:

  <body>
        成功頁面. <br>
  </body>

上傳失敗頁面:

<!-- 引入struts2的標簽庫 -->
<%@ taglib uri="/struts-tags" prefix="s"%>

  <body>
        跳轉錯誤頁面。。<br>
        <!-- fielderror標簽輸出action的fieldErrors屬性保存的字段錯誤,fieldErrors是一個map類型的屬性。 -->
        <s:fielderror />
        <!-- 生產一個查看debug信息的鏈接 -->
        <s:debug />
  </body>

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM