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");
展开
 我来答
匿名_热心网友
推荐于2018-03-29 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8398万
展开全部
eclipse项目包含build文件夹,myeclipse没有这个文件夹,你在import的时候常规general下有4个选项,archive file,exists project,file system,prefrences(档案文件或压缩档案,现存项目,文件系统,首选项),一般完整项目使用第二个,但是如果别人上传的是文件,就使用文件系统导入,看看项目是什么工具做的,再根据具体情况导入
百度网友d348be24f
2011-09-26 · TA获得超过127个赞
知道答主
回答量:207
采纳率:0%
帮助的人:179万
展开全部
这个要用嗅探器分析浏览器上传时HTTP头里有没有上传文件大小的字段,如果有就通过这个字段判断,没有就没办法了。你下载Apache Uploader的源码重新修改编译一下即可。
追问
没用过,不知道哦
追答
org.apache.commons.fileupload.servlet.ServletFileUpload不能满足你的需求,你必须重写这个过程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vmtvjava
2011-10-08 · 超过27用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:57.3万
展开全部
给你一段代码,一下是我在项目中用到的文件上传时候对文件大小的限制
先设定上传文件的允许大小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);
这句还是会执行,要知道这句很耽误时间。
追答
呵呵,我上传的时候只是单个文件的上传,效率上的话也没有考虑了,如果你是做批量上传的话,可能会进行效率上的考虑,否则可以无视了。以上的文件限制的判断是一种比较简单的实现方式吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
新码农客栈
2011-09-26 · TA获得超过335个赞
知道答主
回答量:11
采纳率:0%
帮助的人:8.4万
展开全部
可以在客户端先判断文件大小,如果超过就不提交。
更多追问追答
追问
如何在客户端判断,我用的直接是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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
七巧手作手工
2011-09-26 · TA获得超过433个赞
知道小有建树答主
回答量:291
采纳率:0%
帮助的人:67.3万
展开全部
先用io流中读取文件,其中肯定有方法知道文件的大小。我这里没有java,没法告诉你实际类。
追问
IO流读取时若比较大的文件,如200M的就会影响速度,放弃那种方式;且我用ServletFileUpload还要添加监听做上传进度的显示
追答
200M 太大了吧,你要做视频上传吗?你就用java来实现,然后在jsp页面中去嵌套不就行了,这也属于servlet。只不过让编译器去生成。如果你用servlet的概念来写 ,多费事啊。监听,进度条也很好实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式