Struts2多文件上传错误解决

   用Struts2实现的文件上传的时候,报出错误the request was rejected because its size (3141420) exceeds the configured maximum (2097152)。这是因为上传的文件太大,这时需要在struts.xml中加入一个拦截器,设定上传文件的最大值。

   <action name="upload2" class="com.seven.upload.UploadAction2">
	 <interceptor-ref name="fileUpload">
           <param name="maximumSize">52428800</param>
         </interceptor-ref>
         <interceptor-ref name="defaultStack"></interceptor-ref>
         
         <result>/success.jsp</result>
         <result name="input">/index2.jsp</result>
      </action>

拦截器name属性为fileUpload, 参数名为maximumSize,这里参数值为52428800,表示5M。注:1024*1024=1M。在fileUpload后面再加上默认的拦截器,确保参数能够都提交到Action。其实也可以在struts.xml中配置<constant name="struts.multipart.maxSize" value="55000000"/>

struts.multipart.maxSize掌控整个项目所上传文件的最大的Size
struts.multipart.maxSize和fileUpload拦截器的maximumSize属性分工不同,总结如下:
1.struts.multipart.maxSize掌控整个项目所上传文件的最大的Size。超过了这个size,后台报错,程序处理不了如此大的文件。fielderror里面会有如下的提示:
the request was rejected because its size (16272982) exceeds the configured maximum (9000000)
2.fileUpload拦截器的maximumSize属性必须小于struts.multipart.maxSize的值。
struts.multipart.maxSize默认2M,当maximumSize大于2M时,必须设置struts.multipart.maxSize的值大于maximumSize。
3.当上传的文件大于struts.multipart.maxSize时,系统报错
当上传的文件在struts.multipart.maxSize和maximumSize之间时,系统提示:
File too large: file "MSF的概念.ppt" "upload__5133e516_129ce85285f__7ffa_00000005.tmp" 6007104 
当上传的文件小于maximumSize,上传成功。

下面是Action中的代码

package com.seven.upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

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

import com.opensymphony.xwork2.ActionSupport;

/**
 * 多个文件上传
 * @author Administrator
 * 
 */
public class UploadAction2 extends ActionSupport {
	private List<File> ppt;// 上传的文件域的属性
	private List<String> pptFileName;// 上传的文件名称
	private List<String> pptContentType;// 上传的文件类型

	public List<File> getPpt() {
		return ppt;
	}

	public void setPpt(List<File> ppt) {
		this.ppt = ppt;
	}

	public List<String> getPptFileName() {
		return pptFileName;
	}

	public void setPptFileName(List<String> pptFileName) {
		this.pptFileName = pptFileName;
	}

	public List<String> getPptContentType() {
		return pptContentType;
	}

	public void setPptContentType(List<String> pptContentType) {
		this.pptContentType = pptContentType;
	}

	public String execute() throws Exception {
        System.out.println(ppt);
        System.out.println(pptContentType);
        System.out.println(pptFileName);
       
        //循环遍历每个上传的文件
        for (int i = 0; i < ppt.size(); i++) {
        	String dirs = ServletActionContext.getServletContext().
        			getRealPath("/files/"+pptFileName.get(i));
        	
        	System.out.println(dirs);
        	
        	FileInputStream in=new FileInputStream(ppt.get(i));
        	FileOutputStream out=new FileOutputStream(dirs);
		    IOUtils.copy(in, out);
        
        }
        
		return super.execute();
	}

	public String input() {
		return INPUT;
	}

}
这里成员变量都用了List来接受,为了接受多个传递过来的文件。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值