【java】关于web文件上传commons-fileupload的问题

需求很简单,就是希望 上传文件的大小超过限制后跳转到另一个页面给出提示



代码如下,文件大小不超过限制时没有问题可以跳转到提示页面,但是一旦超过大小(即抛出异常),页面就显示 “ 连接被重置 ”。



@WebServlet(urlPatterns = { "/upfile" })
public class MyServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        DiskFileItemFactory factory = new DiskFileItemFactory();

        ServletFileUpload upload = new ServletFileUpload(factory);

        upload.setSizeMax(1024 * 1024 * 5); // 设置单次上传大小最大值5M
        try {
            //省略获取上传文件代码。。。
            //【成功时可以跳转】
            resp.sendRedirect(req.getContextPath()+"/index.jsp?msg=ok");
        } catch (FileUploadException e) {
            //【失败时无法跳转,且页面显示 连接被重置】
            resp.sendRedirect(req.getContextPath()+"/index.jsp?msg=error");
        }

    }

}

在server.xml 设置上限

你这样麻烦了很多,不如在前端网页中用js做设置,这样可以减轻服务器压力,也比较符合用户习惯,你这样做只能抓取异常来控制代码,可是如果异常太大,是不容易控制的,望采纳,我们公司就是前端控制实现的。

建议使用Ajax上传组件上传
如果后端认为文件过大,则返回错误码或者报错,前台JS去判断错误,是否应该跳转至某页面进行提示
这样可以:
1.前后端分离开发
2.提高服务端代码的可读性与高效性
3.节省服务端资源

应该是上传文件过大后服务器报错把本次请求关闭了,这时你再跳转页面就会报错,建议在前端判断。

应该是上传文件过大后服务器报错把本次请求关闭了,这时你再跳转页面就会报错,建议在前端判断。

你访问文件提交所在页面使用的是localhost吧,你换成ip试一下

在前端用js来做限制就好了,推荐使用layui的上传组件

一般都是在js端去做控制,用的现在流行的框架也会有相应的配置

在框架中配置,比如springmvc中配置bean 的class为SimpleMappingExceptionResolver方式 ,不会配置的话百度这个词看下