2011-06-19 99 views
0

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

+4

您需要修复您的服务器。用户可以禁用JavaScript验证,否则会导致服务器崩溃。 – bdonlan

回答

2

您不希望为此使用客户端验证。无论如何,JS不能访问文件元数据,但JS也可以关闭甚至完全欺骗。

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

要解决这个问题,您应该是avoiding Java code in JSP files,并将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,你也可以只设置错误信息作为属性和FORW指向相同的JSP,并让它以用户友好的方式以相同的形式显示错误。您可以在我们的servlet wiki page中获得一般想法。

+0

嗨,谢谢你的回复... 但是你知道,我在我的项目中使用了spring technology MVC,所以我不能使用这样的servlet ......无论它在到达任何java类之前应用服务器本身抛出错误,视图被吊死。我想你正在谈论我正在谈论的问题...... –

+0

我该怎么知道这件事?你没有在你的问题的任何地方详细提到你如何解析上传的文件和你正在使用的框架。至少,验证不能由JS完成。由于安全限制,它根本无法访问文件元数据。 – BalusC