Struts2
也可以很方便地实现多文件上传。
在输入表单域增加多个文件域:
multifileupload.jsp
- <%@pagelanguage="java"contentType="text/html;charset=UTF-8"%>
- <%@tagliburi="/struts-tags"prefix="s"%>
- <html>
- <head>
- <title>多文件上传</title>
- </head>
- <body>
- <fontcolor="red"><s:fielderror/></font>
- <formaction="multiFileUpload.action"method="POST"enctype="multipart/form-data">
- 文件标题:<inputtype="text"name="title"size="50"value="${param.title}"/><br/>
- <!--设置二个文件域,名字相同-->
- 选择第一个文件:<inputtype="file"name="upload"size="50"/><br/>
- 选择第二个文件:<inputtype="file"name="upload"size="50"/><br/>
- <inputtype="submit"value="上传"/>
- </form>
- </body>
- </html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>多文件上传</title>
</head>
<body>
<font color="red"><s:fielderror/></font>
<form action="multiFileUpload.action" method="POST" enctype="multipart/form-data">
文件标题:<input type="text" name="title" size="50" value="${param.title }"/><br/>
<!-- 设置二个文件域,名字相同 -->
选择第一个文件:<input type="file" name="upload" size="50"/><br/>
选择第二个文件:<input type="file" name="upload" size="50"/><br/>
<input type="submit" value=" 上传 "/>
</form>
</body>
</html>
在
Action
类中用数组 来封装该多个文件域:
MultiFileUploadAction.java
- packageorg.qiujy.web.struts2;
- importjava.io.BufferedInputStream;
- importjava.io.BufferedOutputStream;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importorg.apache.struts2.ServletActionContext;
- importcom.opensymphony.xwork2.ActionSupport;
- /**
- *处理多文件上传的Action类
- *
- *@authorqiujy
- *@version1.0
- */
- publicclassMultiFileUploadActionextendsActionSupport{
- privatestaticfinalintBUFFER_SIZE=16*1024;
- //文件标题
- privateStringtitle;
- //用File数组来封装多个上传文件域对象
- privateFile[]upload;
- //用String数组来封装多个上传文件名
- privateString[]uploadFileName;
- //用String数组来封装多个上传文件类型
- privateString[]uploadContentType;
- //保存文件的目录路径(通过依赖注入)
- privateStringsavePath;
- //以下为所有属性的getter和setter。省略。。。
- //自己封装的一个把源文件对象复制成目标文件对象
- privatestaticvoidcopy(Filesrc,Filedst){
- InputStreamin=null;
- OutputStreamout=null;
- try{
- in=newBufferedInputStream(newFileInputStream(src),BUFFER_SIZE);
- out=newBufferedOutputStream(newFileOutputStream(dst),
- BUFFER_SIZE);
- byte[]buffer=newbyte[BUFFER_SIZE];
- intlen=0;
- while((len=in.read(buffer))>0){
- out.write(buffer,0,len);
- }
- }catch(Exceptione){
- e.printStackTrace();
- }finally{
- if(null!=in){
- try{
- in.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- if(null!=out){
- try{
- out.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- }
- @Override
- publicStringexecute()throwsException{
- File[]srcFiles=this.getUpload();
- //处理每个要上传的文件
- for(inti=0;i<srcFiles.length;i++){
- //根据服务器的文件保存地址和原文件名创建目录文件全路径
- StringdstPath=ServletActionContext.getServletContext()
- .getRealPath(this.getSavePath())
- +"//"+this.getUploadFileName()[i];
- FiledstFile=newFile(dstPath);
- this.copy(srcFiles[i],dstFile);
- }
- returnSUCCESS;
- }
- }