struts2文件上傳

http://www.javashuo.com/article/p-essfflup-gz.htmlhtml

http://www.javashuo.com/article/p-rbqohjhz-gz.htmljava

•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類型設置apache

 

上傳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;
    }
    
}
 

上傳成功頁面:app

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

上傳失敗頁面:框架

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

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