Struts2的一个和多个文件上传的实现
本文由发表于7年前 | J2EE | 评论数 2 |  被围观 9,644 views+

在Struts2中,上传文件时,只要使用java.io.File类来描述上传文件即可,比直接使用Commons-FileUpload组件要简单的多。

上传单个文件:

如果上传的是单个文件,则在Action类中定义一个File类型的变量。该变量的名字与JSP页面上的<input />标签的name属性相对应,只有这样Struts2才能使客户端上传的文件自动与Action类中的相应的属性进行关联处理。

上传多个文件:

如果上传的是多个文件,这时在JSP页面中的所有的<input type="file" name="upload" />标签的name属性值都必须相同,这时Action中相对应的属性就要使用List或File[]用来表示多个文件的信息。

保存文件相关属性的变量设置如下:

private List<File> upload;   //保存上传的文件
private List<String> uploadContentType;	 //保存上传的文件类型
private List<String> uploadFileName;   //保存上传的文件名

以下是一个使用Struts 2上传多个文件的例子,把上传的文件重新用生成的随机数命名:

Struts2上传文件相关代码
public class UploadFilesAction extends ActionSupport {

	private List upload;
	private List uploadContentType;
	private List uploadFileName;
	private String uploadPath;
	private String result;
	private boolean success;
	private String msg;
	public boolean isSuccess() {
		return success;
	}
	public String getMsg() {
		return msg;
	}
	public String getResult() {
		return result;
	}
	public void setUpload(List upload) {
		this.upload = upload;
	}
	public void setUploadContentType(List uploadContentType) {
		this.uploadContentType = uploadContentType;
	}
	public void setUploadFileName(List uploadFileName) {
		this.uploadFileName = uploadFileName;
	}
	public void setUploadPath(String uploadPath) {
		this.uploadPath = uploadPath;
	}
	public String execute() throws Exception {
		for (int i = 0; i < uploadFileName.size(); i++) {
                        Random random = new Random();
                        String filename = uploadFileName.get(i);                         
                        //把上传的文件用生成的随机数重新命名
                        //并判断生成的文件名是否已经存在
                        //如果存在,则继续生成随机数命名,直到找打还没使用的随机数为止
                        filename = uploadPath + random.nextLong()
                                + filename.substring(filename.lastIndexOf("."));
                        while (new File(filename).exists()) {
                            filename = uploadPath + random.nextLong()
                                    + filename.substring(filename.lastIndexOf("."));
                        }
                        FileOutputStream fos = new FileOutputStream(filename);
                        InputStream is = new FileInputStream(upload.get(i));
                        byte[] buffer = new byte[8192];
                        int count = 0;
                        while ((count = is.read(buffer)) > 0) {
                            fos.write(buffer, 0, count);
			}
			fos.close();
			is.close();
		}
		success=true;
		msg = "文件上传成功!";
		return "result";
	}
}
在struts.xml文件中可做如下配置:
<package name="struts2" namespace="/" extends="struts-default">
	<action name="uploadFiles"
            class="uploadtest.actions.UploadFilesAction">
		<result name="result">/WEB-INF/result.jsp</result>
		<param name="uploadPath">D:\UploadFiles\</param>
	</action>
</package>
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/struts2-multiple-file-upload-programming-realization.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 5/8
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    2条评论
  1. 小男孩 2013年05月12日22:43:38  #-49楼 回复 回复

    搂主您好,能把”Struts2的一个和多个文件上传的实现”项目发给我么?谢谢
    邮箱:735245459@qq.com

给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 Java源码分析 – ArrayList动态数组列表源码分析 2011/10/10
2 使用Github和Bitbucket托管项目 Git的全局配置和单个项目的配置 2013/1/11
3 JVM笔记 – 自动内存管理机制(虚拟机性能监控与故障处理工具) 2014/11/26
4 数据结构笔记 – 排序算法 冒泡排序算法实现 2011/9/20
5 Java基础笔记 – Object类的介绍 2011/10/28
6 JBoss服务器的安装 基本配置和使用 2011/11/29
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.