`
only_java
  • 浏览: 111755 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于struts2上传文件大小的设置

阅读更多

     由于struts2的上传机制是通过默认拦截器实现,而默认拦截器的默认大小是大约2M。所以如果设置不当,用户上传2M以上的文件就会被拦截器拦截并在后台抛出异常。异常如下:

 

严重: org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: 
the request was rejected because its size (6964497) exceeds the configured maximum (2097152)

 

   想到在action中设置拦截器拦截文件大小=3M,如下:

 

<interceptor-ref name ="fileUpload"> 
      <param name ="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg</param> 
       <param name="maximumSize
">3000000</param>
            </interceptor-ref> 

 当发现,上传2M的文件时还是不行,照样被默认拦截器截下,并抛出上面的异常。看样子是出在默认拦截器的文件大小的设置上,接着自己把fileupload拦截器去除,自己在action中实现上传错误的业务逻辑。并把默认拦截器的默认最大值设为10M

发现程序终于可以运行到action中去了。

struts.properties

struts.multipart.maxSize=10000000
 

 

ACTION

package com;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.*;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {
	
	private static final long serialVersionUID = 572146812454l;

	private File[] upload;

	private String[] uploadContentType;

	private String[] uploadFileName;

	private String[] imageFileName;
    private String msg="";
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String[] getUploadContentType() {
		return uploadContentType;
	}

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

	public File[] getUpload() {
		return upload;
	}

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

	public String[] getUploadFileName() {
		return uploadFileName;
	}

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

	public void setImageFileName(String[] imageFileName) {
		this.imageFileName = imageFileName;
	}

	public String[] getImageFileName() {
		return imageFileName;
	}

	private static void copy(File src, File dst) {
		try {
			InputStream in = null;
			OutputStream out = null;
			try {
				in = new FileInputStream(src);
				out = new FileOutputStream(dst);
				int len=0;
				
				byte[] buffer=new byte[1024];
				while ((len=in.read(buffer)) > 0) {
					out.write(buffer,0,len);
				}
			}
			finally {
				if (null != in) {
					in.close();
				}
				if (null != out) {
					out.close();
				}
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	private boolean filetype(String current){
		String[] type={"image/bmp","image/png","image/gif","image/jpeg","image/jpg"};
		for(String now:type){
			
			if(now.equals(current)){
				return true;
			}
		}
		return false;
	}
    private String judge(){
    	
    	try{
    		int flag=0;
    		for(int i=0;i<upload.length;i++){
    			
    		  if(filetype(uploadContentType[i])==false){
    			  msg+="<li>"+uploadFileName[i]+" 上传文件的类型错误,只能上传图片类型的文件!</li>"+"\n";   			  
    			  flag=1;
    		  }
    		  InputStream in=new FileInputStream(upload[i]);
    		  int size=in.available();
    		  
    		  if(size>1024*1024){
    			  msg+="<li>"+uploadFileName[i]+"上传文件的大小错误, 单个文件大小小于1M!</li>"+"\n";   			  
    			  flag=1;
    		  }
    		  in.close();
    		}
    		if(flag==1){
    			return INPUT;
    		}else{
    			return SUCCESS;
    		}
    	}catch (Exception e) {
			e.printStackTrace();
		}
    	return ERROR;
    }
	@Override
	public String execute() {
		 String result=judge();
		 String[] target=new String[upload.length];
		 if(result==SUCCESS){
			for(int i=0;i<upload.length;i++){
				
				target[i] = System.currentTimeMillis() + uploadFileName[i].substring(uploadFileName[i].lastIndexOf("."));
				
				File imageFile = new File(ServletActionContext.getServletContext()
						.getRealPath("/uploadImages")
						+ "/" + target[i]);
				copy(upload[i], imageFile);
			}
			setImageFileName(target);
		 }
		return result;
	}

}
 
分享到:
评论

相关推荐

    struts2文件上传,文件大小设置

    本篇将详细介绍Struts2中如何进行文件大小设置,以及涉及到的拦截器配置和灵活性。 首先,我们需要理解Struts2的文件上传机制。在Struts2中,文件上传是通过`&lt;s:file&gt;`标签实现的,这个标签会创建一个`File`对象,...

    struts文件上传大小限制问题

    - Struts 2提供了一个名为`Struts2-FileUpload-plugin`的插件,它可以方便地处理文件上传,并且支持自定义文件大小限制。 5. **安全考虑**: - 不限制文件大小可能会导致DoS攻击,因此,即使服务器和容器未设定...

    struts2实现文件上传下载

    可以通过验证文件扩展名、限制文件大小和类型,以及将上传的文件保存到指定的安全目录来提高安全性。 6. **优化与拓展** 对于大量文件上传,可以考虑使用多线程处理,提高上传效率。还可以添加进度条显示、断点续...

    struts2上传文件源代码

    在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件上传功能,以及涉及到的相关知识点。 首先,文件上传是Web应用中常见的功能,它允许用户从本地计算机选择文件并将其发送到服务器。在Struts2...

    struts2文件上传下载源代码

    2. **设置Struts2配置**:配置文件需要指定允许上传的文件大小、类型等。例如,使用`&lt;constant&gt;`标签设置`struts.multipart.parser`为`jakarta`,以启用`Commons FileUpload`。 3. **编写Action类**:在Action类中...

    JavaEE Struts文件上传

    Struts框架通过解析这个格式化的请求,可以获取到上传文件的信息。 1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便...

    struts2上传文件进度条显示

    这里我们启用了multipart/form-data类型的数据解析,并设置了最大上传文件大小为20MB。 接下来,创建一个Action类来处理文件上传请求。这个类需要继承自`org.apache.struts2.dispatcher.multipart....

    struts2文件上传

    在这个例子中,`allowedTypes`参数指定了允许上传的文件类型,`maximumSize`参数设置了文件大小的上限(以字节为单位)。如果你想要取消这些限制,可以在`struts.xml`中找到相关的配置项并进行修改。例如,你可以...

    Struts2 上传文件(带过滤文件类型和大小)

    首先,我们需要在`struts.xml`配置文件中启用文件上传功能,并指定允许的最大文件大小: ```xml &lt;constant name="struts.multipart.maxSize" value="10485760"&gt;&lt;/constant&gt; &lt;!-- 单位为字节,10MB --&gt; ``` 接着,...

    struts2文件上传例子.rar

    同时,我们还需要配置`struts.multipart.saveDir`属性,指定临时文件保存的位置,以及`struts.multipart.maxSize`,限制上传文件的最大大小。 在视图层,通常会有一个HTML表单,使用`enctype="multipart/form-data...

    struts2 实现文件批量上传

    我们需要在Struts2配置文件中引入对应的拦截器`struts.multipart.parser`,例如设置为`jakarta`。 2. **前端表单**:在HTML表单中,使用`enctype="multipart/form-data"`来指定表单类型,以便支持文件上传。`[]" ...

    swfuplaod+struts2实现多文件上传

    4. **文件大小限制**:可以设置每个文件和总文件大小的限制。 5. **异步上传**:后台处理文件上传,不影响用户继续浏览网页。 **二、Struts2框架介绍** Struts2 是一个基于MVC(Model-View-Controller)模式的Java...

    struts2+jquery+ajax文件异步上传

    在Struts2的配置文件中,我们可以定义这些规则,例如限制上传文件的大小,只接受特定类型的文件(如图片、文档等)。此外,我们还需要关注安全问题,防止恶意文件上传。 文件上传的实现通常包括以下几个步骤: 1. ...

    解决Struts2上传文件后文件大小变大

    总的来说,解决Struts2上传文件后文件大小变大的问题,主要在于正确处理输入流和输出流,以及确保使用正确的文件上传配置和API。在处理文件操作时,推荐使用成熟的库如Apache Commons IO,它们通常提供了更稳定和...

    struts2 上传文件超过最大值解决办法

    在Struts2框架中,处理文件上传是一项常见且重要的功能,尤其当涉及到大文件上传时,往往会遇到上传文件大小超过预设限制的问题。这不仅影响用户体验,还可能导致应用程序出现异常或错误。本文将深入探讨如何解决...

    struts+spring文件上传大小限制.rar

    如果上传文件大小超过这个限制,Struts会抛出`MaxUploadSizeExceededException`异常。 2. Spring框架中的文件上传: Spring提供了`CommonsMultipartFile`类来处理文件上传,它是基于Apache Commons FileUpload库的...

    Struts2文件上传源码

    然而,实际应用中可能需要考虑更多细节,如文件大小限制、类型检查、安全问题(防止文件覆盖、恶意文件上传等)。对于更复杂的需求,可以利用Struts2的拦截器和插件来扩展功能,或者考虑使用其他专门处理文件上传的...

    Struts2+上传文件源码

    这个"Struts2+上传文件源码"是一个演示如何在Struts2框架下实现文件上传的示例代码。 首先,我们来理解上传文件的基本流程。在Struts2中,文件上传是通过`Commons FileUpload`库来处理的,这是一个Apache提供的开源...

    struts2文件上传jar

    `FileItem` 是Apache Commons FileUpload提供的类,它可以更精细地控制文件上传的细节,如文件大小限制、文件类型检查等。而`File` 对象则对应于服务器上的临时文件路径,通常在Action执行完毕后,你需要将文件移动...

    struts2框架下的文件上传

    - 文件大小限制:Struts2默认有文件大小限制,可以通过配置参数`struts.multipart.maxSize`进行调整。 - 文件类型检查:为了安全,需要验证上传文件的类型,防止恶意文件上传。 - 错误处理:确保捕获并处理可能出现...

Global site tag (gtag.js) - Google Analytics