struts2單文件與多文件上傳

jopen 12年前發布 | 29K 次閱讀 Struts2 Web框架

Struts2的單文件上傳與多文件上傳.
首先這個是html頁面內容:

單文件上傳:<br/>
<form action="fileUpload" method="post" enctype="multipart/form-data">
    username:<input type="text" name="username"/><br/>
        <input type="file" name="file"/><br/>
        <input type="submit"/>
   </form>

  多文件上傳:<br/>
    <form action="mulFileUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="files"/><br/>
        <input type="file" name="files"/><br/>
        <input type="file" name="files"/><br/>
        <input type="submit"/>
   </form>



然后是struts action文件代碼:

package com.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction  extends ActionSupport{
    private static final long serialVersionUID = 1L;
    private String username;
    private File file;
    private String fileFileName;    //名字固定的 file與file相同 FileName固定
    private String fileContentType; //名字固定的 file與file線條 ContentType固定
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String fileUpload() throws Exception {
        //設置上傳路徑-----------真實的文件路徑.如:c://tomcat//webapps//upload
        String //root=ServletActionContext.getRequest().getRealPath("/upload"); //該方法在2.1之前使用       
               root=ServletActionContext.getServletContext().getRealPath("/upload");

        //輸入
        InputStream is=new FileInputStream(file);

        //設置文件存放的路徑與名字
        File destFile=new File(root, fileFileName);

        //程序先會將文件放置到臨時目錄,然后從臨時目錄轉移到指定目錄
        //如果臨時目錄不存在將使用環境變量所指定的目錄,如:...tomcat/work ....下面
        //通過struts.properties -->struts.multipart.saveDir  可以設置臨時目錄
        //如:struts.multipart.saveDir=d:/temp


        //輸出文件
        OutputStream os=new FileOutputStream(destFile);
        //每次傳輸的字節
        byte[] buffer=new byte[400];
        //按字節讀取文件的長度
        int length=0;
        //如果沒有讀取到內容將返回-1
        while((length=is.read(buffer))!=-1){
            os.write(buffer,0,length);
        }
        //關閉
        is.close();

        return SUCCESS;

        //如果出錯了將返回INPUT
    }





    public List<File> getFiles() {
        return files;
    }
    public void setFiles(List<File> files) {
        this.files = files;
    }
    public List<String> getFilesFileName() {
        return filesFileName;
    }
    public void setFilesFileName(List<String> filesFileName) {
        this.filesFileName = filesFileName;
    }
    public List<String> getFilesContentType() {
        return filesContentType;
    }
    public void setFilesContentType(List<String> filesContentType) {
        this.filesContentType = filesContentType;
    }

    //前面為get/set方法
    private List<File> files; //也可用File[] files
    private List<String> filesFileName;
    private List<String> filesContentType;
    /*
     *  多文件上傳
     */
    public String mulFileUpload(){

        for (int i = 0; i < files.size(); i++) {
            InputStream is=null;
            try {
                is=new FileInputStream(files.get(i));
                String root=ServletActionContext.getServletContext().getRealPath("/upload");
                File destFile=new File(root,filesFileName.get(i));
                OutputStream os=new FileOutputStream(destFile);
                byte[] buffer=new byte[400];
                int length=0;
                while((length=is.read(buffer))!=-1){
                    os.write(buffer,0,length);
                }
                is.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return SUCCESS;
    }
}



然后是struts.xml 配置內容:

<!-- 單文件上傳 -->
        <action name="fileUpload" class="com.action.UploadAction" method="fileUpload">
            <result name="success">fileuploadresult.jsp</result>
            <result name="input">fileuploaderror.jsp</result>
        </action>

        <!-- 多文件上傳 -->
        <action name="mulFileUpload" class="com.action.UploadAction" method="mulFileUpload">
            <result name="success">fileuploadresult.jsp</result>
            <result name="input">fileuploaderror.jsp</result>
        </action>



struts2單文件與多文件上傳

struts2單文件與多文件上傳

struts2單文件與多文件上傳
struts2單文件與多文件上傳

struts2單文件與多文件上傳


本文地址:http://www.zhjie.net/struts2-single-file-and-multi-file-upload.htm

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!