多文件上传

来源:互联网 发布:龙岗网络推广szaow 编辑:程序博客网 时间:2024/05/29 17:11

多文件上传

实际项目中避免不了多文件上传,对于这种情况可以为file设置不同的name然后按照单文件上传的方式逐个上传,但是这种方式比较傻,下面介绍使用数组或者list实现上传
不多说,看代码:
jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  </head>  <body>  <form action="MultiUpload.action" method="post" enctype="multipart/form-data">        文件1:<input type="file" name="upload"/><br/>        文件2:<input type="file" name="upload"/><br/>        文件3:<input type="file" name="upload"/><br/>        <input type="submit" value="上传"/>    </form>  </body></html>

MultiUpload.java

package Action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class MultiFileUpload extends ActionSupport {    private File [] upload;    private List<String> uploadContentType;    private List<String> uploadFileName;    private String savePath;    public String execute() throws Exception{        File [] uploadFiles = getUpload();        for(int i=0; i < uploadFiles.length; i++){            //读入            FileInputStream fis = new FileInputStream((File)uploadFiles[i]);            //写出            FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+                    getUploadFileName().get(i));            byte [] buffer = new byte[1024];            int len = 0;            while((len = fis.read(buffer)) > 0){                fos.write(buffer,0,len);            }        }        return SUCCESS;    }    public File[] getUpload() {        return upload;    }    public void setUpload(File[] upload) {        this.upload = upload;    }    public List<String> getUploadContentType() {        return uploadContentType;    }    public void setUploadContentType(List<String> uploadContentType) {        this.uploadContentType = uploadContentType;    }    public List<String> getUploadFileName() {        return uploadFileName;    }    public void setUploadFileName(List<String> uploadFileName) {        this.uploadFileName = uploadFileName;    }    public void setSavePath(String savePath) {        this.savePath = savePath;    }    public String getSavePath() {        return ServletActionContext.getRequest().getRealPath(savePath);    }}

struts.xml

<action name="MultiUpload" class="Action.MultiFileUpload">            <param name="savePath">/upload</param>            <result>/success2.jsp</result>        </action>

通过debug模式下查看自己上传的文件相应的值:
File [] uploadFiles :
[
F:\Users.metadata.me_tcat\work\Catalina\localhost\test\upload_17295b0b_3bd6_49b1_a7a8_e2f8b42141ac_00000000.tmp,
F:\Users.metadata.me_tcat\work\Catalina\localhost\test\upload_17295b0b_3bd6_49b1_a7a8_e2f8b42141ac_00000001.tmp,
F:\Users.metadata.me_tcat\work\Catalina\localhost\test\upload_17295b0b_3bd6_49b1_a7a8_e2f8b42141ac_00000002.tmp
]
UploadFileName():
[
20140530165433234 (1).jpg,
20140530165433234.jpg,
20140530165433234 (1).jpg
]
还有一种实现方式:
修改MultiUpload.java,使用数组的方式上传:

package Action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class MultiFileUpload2 extends ActionSupport {    private File [] upload;    private String [] uploadContentType;    private String [] uploadFileName;    private String savePath;    public String execute() throws Exception{        File [] files = getUpload();        for(int i=0;i< files.length;i++){            FileInputStream fis = new FileInputStream(files[i]);            FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"                    +getUploadFileName()[i]);        byte [] buffer = new byte[1024];        int len = 0;        while((len = fis.read(buffer)) > 0){            fos.write(buffer,0,len);        }        }        return SUCCESS;    }    public File[] getUpload() {        return upload;    }    public void setUpload(File[] upload) {        this.upload = upload;    }    public String[] getUploadContentType() {        return uploadContentType;    }    public void setUploadContentType(String[] uploadContentType) {        this.uploadContentType = uploadContentType;    }    public String[] getUploadFileName() {        return uploadFileName;    }    public void setUploadFileName(String[] uploadFileName) {        this.uploadFileName = uploadFileName;    }    public String getSavePath() {        this.savePath = ServletActionContext.getRequest().getRealPath(savePath);        return   savePath;    }    public void setSavePath(String savePath) {        this.savePath = savePath;    }}

和第一个action文件没啥大的差别仅仅是实现的方式不同罢了

1 0
原创粉丝点击