`
fulerbakesi
  • 浏览: 561605 次
文章分类
社区版块
存档分类
最新评论

Struts2实现多个文件上传的示例

 
阅读更多

上篇博客实现的是单个文件上传,这次实现多个文件上传。其中命名规范跟上篇博客一样。

思路如下:多个文件上传,需要注入多个文件对象中,所以Action中定义多个文件,因此是定义文件数组。在这个实例中,我们应用List来实现。

其实,在上传文件,无论是单个文件还是多个文件,就是从上传的临时文件或文件组(循环)读到本地中。

因此,javaio基础是关键。遇到文件的读写,发现io流基础不牢固,回头又重新看了马士兵的io流并实践io流小例子。其中io流的总结参见博客Java IO流分析整理》

在多文件上传中,利用缓冲流进行写入文件中。实例如下:

package com.upload;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.List;
import java.util.Map;

import javassist.bytecode.Descriptor.Iterator;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/*
 * 多文件上传
 */
public class MultiUpload extends ActionSupport {
	
	private List<File> file;
	private List<String> fileFileName;
	private List<String> fileContentType;
	//每个文件的大小
	private Long maximumSize;
	//文件的类型
	private String allowedTypes;
	
	
	public Long getMaximumSize() {
		return maximumSize;
	}

	public void setMaximumSize(Long maximumSize) {
		this.maximumSize = maximumSize;
	}

	public String getAllowedTypes() {
		return allowedTypes;
	}

	public void setAllowedTypes(String allowedTypes) {
		this.allowedTypes = allowedTypes;
	}
	
	public List<File> getFile() {
		return file;
	}
	
	public void setFile(List<File> file) {
		this.file = file;
	}

	public List<String> getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}

	public List<String> getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}

	public String execute() throws Exception {
		
		String s=null;
		File uploadFile =new File(ServletActionContext.getServletContext().getRealPath("file"));
		if(!uploadFile.exists())
		{
			uploadFile.mkdir();
		}
	
		boolean[] flags=null;
		//用于标识
		flags=new boolean[file.size()];
		
		//规定的上传文件格式分解
		String[] fileType =allowedTypes.split(",");
		
//		判断文件大小是否符合条件
		for(int i=0;i<file.size();i++)
		{
			flags[i]=false;
			
			//若是上传的文件大小大于规定的长度
			if(maximumSize<file.get(i).length())
			{
				Map request=(Map)ServletActionContext.getContext().get("request");
				request.put("errorMessage", "文件太大,不能上传");
			    return "input";
			}
			
			//判断上传的文件的类型
			for(int j=0;j<fileType.length;j++)
			{
				if(fileContentType.get(i).equals(fileType[j]))
				{
					flags[i]=true;
				}
			}
		}
		
		//然后判断是否存在类型的不合格
		for(int k=0;k<flags.length;k++)
		{
			if(flags[k]==false)
			{
				Map request=(Map)ServletActionContext.getContext().get("request");
				request.put("errorMessage", "文件类型不符合");
			    return "input";
			}
		}
			
		//把临时文件保存为本地文件
		for(int i=0;i<file.size();i++)
		{
			FileReader fis=new FileReader(file.get(i));
			FileWriter fos=new FileWriter(uploadFile +"\\"+fileFileName.get(i));
			
			BufferedReader br=new BufferedReader(fis);
			BufferedWriter bw=new BufferedWriter(fos);
			
			while((s=br.readLine())!=null)
			{
				bw.write(s);
			}
		}
			
	  return "success";
	}
}


struts.xml配置文件,和单个文件上传配置类似如下:

 <action name="multiUpload" class="com.upload.MultiUpload">
	  <result name="success">success.jsp</result>
	  <result name="error">error.jsp</result>
	  <result name="input">input.jsp</result>
	  <param name="maximumSize">1000000</param>
      <param name="allowedTypes">application/msword,text/plain</param>
 </action>

Jsp页面如下:

<form action="multiUpload"  enctype="multipart/form-data" method="post">
 <input type="file" name="file"><br>
 <input type="file" name="file"><br>
 <input type="file" name="file"><br>
 <input type="submit" value="登录">
</form>

对于上传文件中的文件大小和文件类型的限制,可以不用手动限制,在这两篇博客中,都自己手动在Action中编写代码,可以利用Struts2中的文件拦截器,直接在配置文件中的Action中进行配置:

<interceptor-ref name="fileUpload">
     <param name="maximumSize">1000000</param>
     <param name="allowedTypes">application/msword,text/plain</param>
   </interceptor-ref>
 <interceptor-ref name="defaultStack"></interceptor-ref> 
分享到:
评论
1 楼 chuyuan_china 2013-04-11  
126,127行记得提到外面,并且关闭流

相关推荐

    struts2实现单个和多个文件上传示例代码

    直接将myeclipse工具导入项目fileupload即可测试

    struts中多文件上传简单示例

    可以实现一次性上传多个文件,使用JavaScript动态添加一个上传文本框。是用struts2实现的

    一个Struts1多文件上传实例(附Form中传List示例)

    NULL 博文链接:https://wankunde.iteye.com/blog/904409

    struts2实现多文件上传的示例代码

    本篇文章主要介绍了struts2实现多文件上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    struts2文件上传

    struts2文件上传。 包括一个上传单个文件的示例, 和一个多文件上传的示例, 包含所需要的所有jar文件。

    struts(单,多)文件上传

    一个strtus2框架的文件上传示例的小工程,可以直接import到eclipse中跑

    深入浅出Struts2(附源码)

    12.5 上传多个文件示例 227 12.6 小结 230 第13章文件的下载 231 13.1 文件下载概述 231 13.2 Stream结果类型 232 13.3 文件下载功能的编程实现 235 13.4 小结 238 第14章提高Struts应用程序的安全性 239 ...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    12.5 上传多个文件示例 227 12.6 小结 230 第13章 文件的下载 231 13.1 文件下载概述 231 13.2 Stream结果类型 232 13.3 文件下载功能的编程实现 235 13.4 小结 238 第14章 提高Struts应用程序的安全性 239 14.1 ...

    strut2.0组图上传

    这里使用struts2的common-FileUpload框架同时上传多个图片的简单示例,灵活地用数组封装多个文件域(name相同)

    JAVA上百实例源码以及开源项目

    第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动多个客户端 实现群聊。 浮动的广告 嵌套在html中 各种EJB之间的调用示例 7个目标文件 摘要:Java源码,初学实例,EJB调用实例  各种EJB之间的调用源码...

    JAVA上百实例源码以及开源项目源代码

    第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动多个客户端 实现群聊。 浮动的广告 嵌套在html中 各种EJB之间的调用示例 7个目标文件 摘要:Java源码,初学实例,EJB调用实例  各种EJB之间的调用源码...

    java文集

    DFS文件读写 网络爬虫之Spider Java正则表达式的总结关键词: Java正则表达式 批量上传--采集 (多个文件夹) The Agile Way hibernate mapping文件中的标记详解:关系标记 ANT 安装使用及...

    java开源包2

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包3

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包4

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包1

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

Global site tag (gtag.js) - Google Analytics