java用org.apache.commons.fileupload.servlet.ServletFileUpload上传文件,限制上传文件大小。急在线等。
我用org.apache.commons.fileupload.servlet.ServletFileUpload进行文件上传的时候,发现设置setFileSizeMax...
我用org.apache.commons.fileupload.servlet.ServletFileUpload进行文件上传的时候,发现设置setFileSizeMax以后,如果有很大的文件上传时,先是很迅速得执行到parseRequest方法,然后在这个方法中卡住,网络流量暴增,看来客户端已经开始上传了,然后过了一会儿上传完毕才抛出异常SizeLimitExceededException,告诉文件超过限制且上传失败。
怎样才能在执行parseRequest之前就判断文件大小超过限制,不要进行后面的上传操作呢?请大家帮忙,解决问题再追加分。
也就是说若文件超过限定大小,则parseRequest就会出错,下面的prntln就不会执行,如何在parseRequest这句前就判断超出限定并给USER提示呢
java.util.List items = upload.parseRequest(request);//把request parse成FileItem List
System.out.println("666666666666666666666666666666666"); 展开
怎样才能在执行parseRequest之前就判断文件大小超过限制,不要进行后面的上传操作呢?请大家帮忙,解决问题再追加分。
也就是说若文件超过限定大小,则parseRequest就会出错,下面的prntln就不会执行,如何在parseRequest这句前就判断超出限定并给USER提示呢
java.util.List items = upload.parseRequest(request);//把request parse成FileItem List
System.out.println("666666666666666666666666666666666"); 展开
展开全部
这个要用嗅探器分析浏览器上传时HTTP头里有没有上传文件大小的字段,如果有就通过这个字段判断,没有就没办法了。你下载Apache Uploader的源码重新修改编译一下即可。
追问
没用过,不知道哦
追答
org.apache.commons.fileupload.servlet.ServletFileUpload不能满足你的需求,你必须重写这个过程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你一段代码,一下是我在项目中用到的文件上传时候对文件大小的限制
先设定上传文件的允许大小MAX_SIZE,在这一块进行异常捕捉,如果超过设定大小,则会进入异常处理中,然后抛出异常
PageSysException为我们项目中自定义的异常处理类
int MAX_SIZE=1024*100;
ServletFileUpload uploadHandler = new ServletFileUpload(new DiskFileItemFactory());
PrintWriter writer = null;
String fileName="";
List<FileItem> items=null;
uploadHandler.setHeaderEncoding("GBK");
uploadHandler.setFileSizeMax(MAX_SIZE);
try {
items = uploadHandler.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof FileSizeLimitExceededException) {//文件尺寸超过规定大小 System.out.print("文件超出限制");
throw new PageSysException(new Message(“文件超出限制”));
}
e.printStackTrace();
}
先设定上传文件的允许大小MAX_SIZE,在这一块进行异常捕捉,如果超过设定大小,则会进入异常处理中,然后抛出异常
PageSysException为我们项目中自定义的异常处理类
int MAX_SIZE=1024*100;
ServletFileUpload uploadHandler = new ServletFileUpload(new DiskFileItemFactory());
PrintWriter writer = null;
String fileName="";
List<FileItem> items=null;
uploadHandler.setHeaderEncoding("GBK");
uploadHandler.setFileSizeMax(MAX_SIZE);
try {
items = uploadHandler.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof FileSizeLimitExceededException) {//文件尺寸超过规定大小 System.out.print("文件超出限制");
throw new PageSysException(new Message(“文件超出限制”));
}
e.printStackTrace();
}
更多追问追答
追问
items = uploadHandler.parseRequest(request);
这句还是会执行,要知道这句很耽误时间。
追答
呵呵,我上传的时候只是单个文件的上传,效率上的话也没有考虑了,如果你是做批量上传的话,可能会进行效率上的考虑,否则可以无视了。以上的文件限制的判断是一种比较简单的实现方式吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以在客户端先判断文件大小,如果超过就不提交。
更多追问追答
追问
如何在客户端判断,我用的直接是JSP页面,没有用servlet
追答
参考代码:
Insert title here
var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
var sizeLabel = ["B", "KB", "MB", "GB"];
function fileChange(target) {
var fileSize = 0;
if (isIE && !target.files) {
var filePath = target.value;
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
var file = fileSystem.GetFile (filePath);
fileSize = file.Size;
} else {
fileSize = target.files[0].size;
}
displayFileSize(fileSize);
}
function displayFileSize(size) {
var fileSize = document.getElementById("fileSize");
fileSize.innerHTML = calFileSize(size);
}
function calFileSize(size) {
for (var index = 0; index
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先用io流中读取文件,其中肯定有方法知道文件的大小。我这里没有java,没法告诉你实际类。
追问
IO流读取时若比较大的文件,如200M的就会影响速度,放弃那种方式;且我用ServletFileUpload还要添加监听做上传进度的显示
追答
200M 太大了吧,你要做视频上传吗?你就用java来实现,然后在jsp页面中去嵌套不就行了,这也属于servlet。只不过让编译器去生成。如果你用servlet的概念来写 ,多费事啊。监听,进度条也很好实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询