2011-06-19 148 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