由于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;
}
}
分享到:
相关推荐
struts文件上传大小限制问题struts文件上传大小限制问题struts文件上传大小限制问题struts文件上传大小限制问题
struts2文件上传,文件大小设置,拦截器配置,移动性好
Struts2 上传文件 过滤文件类型 过滤大小
JavaEE Struts文件上传
注:项目类无struts2 jar包需自行添加。 struts2上传文件的进度条显示,...2.显示已上传文件大小 3.显示当前进度(百分比控制) 4.显示剩余上传时间 5.显示当前速度 (本人研究了很久才搞出来的,希望大家指教)
下载word文档和代码,你就一定能够解决此问题。 解决Struts2上传文件后文件大小变大
Struts1文件上传、单文件、多文件上传(上传文件大小问题,如何设置无限制)
struts+spring文件上传大小限制 所以不设资源分,可以自由下载
基于struts2的文件上传+过滤器 可以动态的控制文件的类型和文件大小
使用struts2框架进行文件的上传并限制文件的大小与类型,使用struts2框架实现文件下载
Struts2 文件上传下载 多文件 单文件 实例;支持单个或多个文件的上传下载,并且自定义上传文件的大小和类型!!!
用struts2实现的文件上传,带文件类型验证,大小限制,都是可以配置的,具体看你怎么配置了!
struts2文件的上传与下载,包含超出指定文件大小之后的提示。更多详细内容,请参考博客:http://blog.csdn.net/qq_20889581/article/details/52838848
Struts2图片文件上传,判断图片格式和图片大小
struts文件上传大小限制,对大小进行限制以及常见错误
3) 修改服务器端可上传文件大小的限制 在文件 usr local nginx conf nginx conf中修改client max body size 毕竟是第一次用 不是很熟悉 希望有人发现问题可以交流一下">这是根据uploadify3 2结合struts2搭建的...
用struts2实现上传控制上传文件类型、大小以及多文件上传
注:项目类无struts2 jar包需自行添加。 struts2上传文件的进度条显示,绝对...2.显示已上传文件大小 3.显示当前进度(百分比控制) 4.显示剩余上传时间 5.显示当前速度 (本人研究了很久才搞出来的,希望大家指教)
一个struts 2实现文件上传实例,上传文件类型、大小、路径都在 xml里面配置。