`

struts2上传文件及多文件上传

阅读更多
1. struts2中的文件上传
第一步:在WEB=INF/lib下加入commons-fileupload-1.2.1.jar , commons-io-1.3.2.jar。

第二步:把form表单的enctype属性设置为"multipart/form-data",如
 
  <form action="${pageContext.request.contextPath}/control/employee/list_execute.action" enctype="multipart/form-data" method="post">
    	文件:<input type="file" name="image">
    	<input type="submit" value="上传"/>
    </form>
    //${pageContext.request.contextPath}:获取服务器根路径
   
第三步:在action中添加一下属性,
public class HelloWorldAction {
	private File image;           //与jsp表单中的名称对应
	private String imageFileName; //FileName为固定格式
	private String imageContentType ;//ContentType为固定格式
	
	public String getImageContentType() {
		return imageContentType;
	}
	public void setImageContentType(String imageContentType) {
		this.imageContentType = imageContentType;
	}
	public String getImageFileName() {
		return imageFileName;
	}
	public void setImageFileName(String imageFileName) {
		this.imageFileName = imageFileName;
	}
	public File getImage() {
		return image;
	}
	public void setImage(File image) {
		this.image = image;
	}
	public String execute() throws Exception{
System.out.println("imageFileName = "+imageFileName);	
System.out.println("imageContentType = "+imageContentType);
        //获取服务器的根路径realpath
		String realpath = ServletActionContext.getServletContext().getRealPath("/images");
System.out.println(realpath);
		if(image!=null){
			File savefile = new File(new File(realpath), imageFileName);
			if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();
			FileUtils.copyFile(image, savefile);
			ActionContext.getContext().put("message", "上传成功");
		}else{
			ActionContext.getContext().put("message", "上传失败");
		}
		return "success";
	}
}
  
此外,可以在struts.xml中配置上传文件的大小
    <constant name="struts.multipart.maxSize" value="10701096"/> //最大上传配置成10M
    默认的上传大小为2M

思维拓展:如果要上传的文件非常大,如上传的是电影,好几百M ,用web上传一般是不可能难上传成功的,这时候要安装一个插件,类似于应用程序
          socket ,通过网络通讯上传。

2 . 多文件上传
    在上面的基础上略加改动
    1.jsp表单
 
  <form action="${pageContext.request.contextPath}/control/employee/list_execute.action" enctype="multipart/form-data" method="post">
    	文件1:<input type="file" name="image"><br/>
    	文件2:<input type="file" name="image"><br/>
    	文件3:<input type="file" name="image"><br/>
    	<input type="submit" value="上传"/>
    </form>
    2. action中用数组接收
 
  public class HelloWorldAction {
	private File[] image;
	private String[] imageFileName;
	private String[] imageContentType ;
	//省略了set和get方法
	public String execute() throws Exception{
		
		String realpath = ServletActionContext.getServletContext().getRealPath("/images");
		System.out.println(realpath);
		if(image!=null){
			File savedir = new File(realpath);
			if(!savedir.exists())
			   { 
				  savedir.mkdirs();
			   }
		System.out.println("image.length = "+image.length);
			for(int i = 0 ; i<image.length ; i++){
				
System.out.println("imageContentType["+i+"] = "+imageContentType[i]);
				File savefile = new File(savedir, imageFileName[i]);
				FileUtils.copyFile(image[i], savefile);
			}
			ActionContext.getContext().put("message", "上传成功");
		}
		return "success";
	}
}
分享到:
评论
2 楼 笑我痴狂 2010-07-22  
可以啊  有什么问题吗? 

一样的可以上传其他表单参数啊

我已经调试过了 ,不知道你为什么会有那样的问题


       
1 楼 kissjsp 2010-07-20  
   我现在一直被这样的一个问题困惑  就是   单纯的文件上传  说实在的  还是蛮简单的  只要是把组件找全了 问题都不是很大的    但是   我现在想实现的功能是文件和表单信息同时上传的    

   这样的话  问题就来了  因为 上传文件是以二进制流的形式上传的  表单的参数  使用我们以前常用的request.getParameter是接收不到参数     我现在使用的fileupload的组件上传的   不知道 各位大虾有什么方法  能接收到参数 

  或者有其他的方法能同时实现这样的功能  一个表单  一次提交    同时上传文件和表单信息。

相关推荐

Global site tag (gtag.js) - Google Analytics