客户端文件大小验证javascript

client side file size validation javascript

本文关键字:javascript 验证 文件大小 客户端      更新时间:2023-09-26

每当我选择一个大小超过50MB的文件上传时,我的JBoss服务器就会抛出一个异常,JSP就会挂起。因此,我必须在客户端验证文件大小,而不是在java服务器端验证文件大小。但我找不到任何合适的方法。有人能帮我吗?我不能使用任何flash上传功能。

您不希望对此使用客户端验证。JS不仅不能访问文件元数据,而且JS还可以被关闭甚至完全伪造。

至于具体的问题,听起来就像是在JSP文件中解析上传的文件,而不是在普通的Java(Servlet)类中。由于JSP是HTTP响应的视图技术部分,任何在JSP输出中途抛出的异常,服务器都不能再将HTTP响应更改为错误页面。由于JSP输出突然中止,客户端很可能最终会得到一个带有半成品HTML源代码的空白页面。

要解决这个问题,您应该避免在JSP文件中使用Java代码,而是将Java代码放在普通的Java类中。在这种特殊情况下,您希望使用servlet。让表单提交到servlet而不是JSP。

<form action="uploadServlet" method="post">

以下是其doPost()方法的启动示例:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        // Parse file upload.
        // At end, forward request/response to JSP to present results in HTML.
        request.getRequestDispatcher("/WEB-INF/results.jsp").forward(request, response);
    } catch (FileUploadException e) { // Or whatever exception it is throwing.
        throw new ServletException("File upload failed", e);
    }
}

这样,异常将在默认的HTTP 500错误页面中结束,您可以在web.xml 中自定义如下

<error-page>
    <exception-type>com.something.FileUploadException</exception-type>
    <location>/someFileUploadErrorPage.jsp</location>
</error-page>

或者,您也可以不抛出ServletException,而是将错误消息设置为属性并转发到同一JSP,让它以用户友好的方式以相同的形式显示错误。