文件上传问题

你好,波总,新公司java开发是用Jfinal搭建的架构,从接触到现在感觉还是很不错的,非常简洁实用。最近做文件上传遇到问题,就是如果我限制了上传文件大小,如果上传文件超过限制的话就会抛异常。自己捕捉到异常后想在异常中做提示信息处理,却发现代码完全无法按预想的情况走,无法正常回跳页面,而是提示页面被重置了,请问如何处理文件限制大小后的情况呢?

upgradeFiles = this.getFiles("upgradeFile", PropKit.getInt("upgradeSize",100 * 1024));

} catch (Exception e) {
    this.setAttr("msg", "文件大小不能超过100M");
    render("upgrade.html");
    return;
}

评论区

JFinal

2017-12-21 17:51

要捕捉文件大小超出范围,利用下面这个异常精准:
catch (com.jfinal.upload.ExceededSizeException e)

这样的话,能精确知道是文件大小超出范围这个事发生了,因为还有很多其它的异类型

出现异常以后通常是 forwardAction("/otherAction") 或者 render(...) 一下就好了,注意要添加一个 return 语句,看你的代码貌似是对的,单步调试一下,看到底是为什么有问题

陈本布衣

2017-12-22 09:31

按照你说的还是有的问题,就是这个包里根本没有这个异常类,无法代码实现;我现在解决方案是上传先不限制文件大小(不知道Jfianl有没有默认大小),保证不抛异常,避免连接被重置的情况,待上传获取到UploadFile对象后通过获取文件路径去判断文件大小。但这有个很大的问题就是上传文件本身是先要把文件上传到服务器上的,当文件很大时需要比较长的等待时间;而且待后面通过UploadFile对象拿到文件路径再判断文件超限其实已经是滞后操作了,服务器白做了不必要的消耗。求给个解决方案,谢谢(ps:提交回复总是提示敏感词,完全没看到哪里有敏感词,很蛋疼)

陈本布衣

2017-12-22 11:32

另外补充:你说的异常类我导入语Jfianl最新的3.3jar包里面就有了,这个代码可以实现,报异常是精确捕捉了,但是页面被重置的问题依然;而且为什么文件超限异常后都有两次请求提交到这个上传方法里面,这就是连接被重置的原因?

JFinal

2017-12-22 11:37

@陈本布衣 在浏览器中按一下 F12,打开开发者工具,确定是不是浏览器发起了多次请求,然后再进一步解决

历史上很多询问请求重复的问题, 99.9% 都是客户端就是发了多次请求,剩下的 0.1% 的情况是程序中用了 forwardAction 之类的又跳回来了

jfinal 是绝对不可能自做主张发起多次请求的

陈本布衣

2017-12-26 11:37

这几天忙没有及时反馈。捕捉异常始终会有页面连接重置的问题,调试浏览器也确实没有发重复请求,但后台断点又确实两次执行,问题就出在异常捕捉后,始终会有连接重置情况,实在不知如何处理了;后面是将文件大小改为前端js验证,如果超限直接就无法提交,后台的验证相当于是没有使用到。

JFinal

2017-12-26 12:44

一定可以解决的,程序在断点停下来以后,看一下调用栈,看是谁发起的调用,找到源头立即解决

热门反馈

扫码入社