十四、Struts2实现文件批量上传

看这篇文章之前,建议先看看单个文件上传的实现十一、Struts2上传文件

下面直接在原来工程的基础上,实现支持批量上传的功能。

修改User类

添加多一个集合,用于保存批量上传文件的相对路径

public class User {
	private String name;
	private Integer age;
	private String image;//保存单个文件上传的相对路径

	private List<String> images;//保存批量文件上传的相对路径
	
	//get set方法...
}

修改UploadAction

添加批量上传的代码

package blog.csdn.net.web.action;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import blog.csdn.net.domain.User;
import blog.csdn.net.utils.UploadUtils;

public class UploadAction extends ActionSupport implements ModelDriven<User> {

	private static final long serialVersionUID = 1L;
	
	//模型驱动注入值
	private User user = new User();
	
	@Override
	public User getModel() {
		return user;
	}

	
	/**
	 * 单文件上传
	 * 通过属性驱动注入3个值
	 * 文件上传相关的3个属性 ,struts2会自动注入 
	 * 上传的文件 : 属性名与表单中file的name属性名一致 
	 * 上传的文件名:属性名前段是name属性名一致+FileName; 
	 * 上传的文件类型: 属性名前段是name属性名一致 + ContentType;
	 */
	private File upload; // 表单的name是upload
	private String uploadFileName; // 文件名
	private String uploadContentType;// 文件类型

	public void setUpload(File upload) {
		this.upload = upload;
	}

	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}

	/**
	 * 批量文件上传,和单文件上传类似,只需要将那3个属性变成数组即可
	 */
	private File[] mulitupload; // 表单的name是mulitupload
	private String[] mulituploadFileName; // 文件名
	private String[] mulituploadContentType;// 文件类型
	
	public void setMulitupload(File[] mulitupload) {
		this.mulitupload = mulitupload;
	}

	public void setMulituploadFileName(String[] mulituploadFileName) {
		this.mulituploadFileName = mulituploadFileName;
	}

	public void setMulituploadContentType(String[] mulituploadContentType) {
		this.mulituploadContentType = mulituploadContentType;
	}
	
	public String upload() throws IOException {
		//单文件上传
		if (null != this.uploadFileName) {
			// 说明有文件需要上传
			String filename = UploadUtils.getUUIDName(this.uploadFileName);
			// 保存到tomcat目录下
			String uploadDidr = "E:\\apache-tomcat-7.0.52\\webapps\\upload";
			// 保存上传的文件
			FileUtils.copyFile(upload, new File(uploadDidr, filename));
			
			//保存文件到User中,只保存相对路径,外部访问的时候可以拼上tomcat服务器的地址
			user.setImage("/upload/"+filename);
		}
		
		// 批量文件上传
		if (null != this.mulituploadFileName) { 
			// 保存到tomcat目录下
			String uploadDidr = "E:\\apache-tomcat-7.0.52\\webapps\\upload";
			
			//保存上传的文件浏览路径
			List<String> images = new ArrayList<>();
			
			HttpServletRequest request = ServletActionContext.getRequest();
			
			//循环读写文件
			for (int i = 0; i < mulituploadFileName.length; i++) {
				//uuid处理后的文件名
				String filename = UploadUtils.getUUIDName(mulituploadFileName[i]);
				
				//需要上传的文件
				File file = mulitupload[i];
				
				// 保存上传的文件,通过apache提供的工具类来操作
				FileUtils.copyFile(file, new File(uploadDidr, filename));

				// 保存文件到User中,只保存相对路径,外部访问的时候可以拼上tomcat服务器的地址
				String image = "/upload/"+filename;
				images.add(image);
				
				user.setImages(images);

			}
		}
		
		//下面的操作就是调业务层的代码将user的数据进行保存,例如userService.save(user);
		//我这里没有集成hibernate,所以就直接通过控制台来查看了
		System.out.println(user);
		
		//回写结果
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().print("提交成功!!");
		
		return NONE;
	}


}

修改struts.xml

修改配置文件,让其支持gif,mp4的提交

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- 设置上传文件的总大小,默认是2M  struts.multipart.maxSize=2097152,现在修改成最大20M -->
	<constant name="struts.multipart.maxSize" value="20971520"/>
	
	<package name="default" namespace="/" extends="struts-default">
	
		<action name="*" class="blog.csdn.net.web.action.UploadAction" method="{1}">
			<!-- 配置input结果错误的页面-->
			<result name="input" type="redirect">/msg.jsp</result>
			 
			<!-- 引入默认的拦截器 -->
			<interceptor-ref name="defaultStack">
				<!-- 决定上传文件的类型 -->
				<param name="fileUpload.allowedExtensions">.jpg,.png,.gif,.mp4</param>
			</interceptor-ref>
			
		</action>
	</package>

</struts>

修改index.jsp

添加批量上传的表单

<form action="${pageContext.request.contextPath}/upload" method=post
		enctype="multipart/form-data">
		
	姓名:<input type="text" name="name"> <br />
	年龄:<input type="text" name="age"> <br /> 
	文件1:<input type="file" name="mulitupload"> <br /> 
	文件2:<input type="file" name="mulitupload"> <br /> 
	文件3:<input type="file" name="mulitupload"> <br /> 
	文件4:<input type="file" name="mulitupload"> <br /> 
	<input type="submit" value="提交">
	
</form>

测试

访问项目主页,选择好要上传的文件
在这里插入图片描述
提交成功
在这里插入图片描述

控制台也输出我们提交的内容
在这里插入图片描述
查看上传目录
在这里插入图片描述
可以看到我们刚刚提交的4个文件都成功了.

搞定~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值