2011-06-19 20 views
0

アップロードするサイズが50MBを超えるファイルを選択すると、JBossサーバーが例外をスローしてJSPがハングしています。したがって、Javaサーバー側でファイルサイズを検証する代わりに、クライアント側で検証する必要があります。しかし、私はそれについて適切なアプローチを見つけることができません。誰でも助けてくれますか?フラッシュアップロード機能は使用できません。クライアント側のファイルサイズの確認javascript

+4

サーバーを修正する必要があります。ユーザーは、JavaScriptの検証を無効にして、サーバーをクラッシュさせることができます。 – bdonlan

答えて

2

このためにクライアント側の検証を使用したくないです。とにかくJSはファイルメタデータにアクセスできないだけでなく、JSもオフにすることも、完全になりすますこともできます。

具体的な問題は、通常のJava(Servlet)クラスではなく、JSPファイル内のアップロードされたファイルを解析しているかのように思えます。 JSPはHTTPレスポンスのビューテクノロジの一部であるため、JSPの途中でスローされた例外はすべて、HTTPレスポンスをエラーページに変更することはできません。クライアントは、JSP出力が突然中止されたため、ハーフベークされたHTMLソースの空白のページで終わる可能性が非常に高いでしょう。

この問題を解決するには、avoiding Java code in JSP filesで、Javaコードを通常のJavaクラスに置き換える必要があります。この特定のケースでは、servletを使用します。フォームをJSPの代わりにservletに送信します。

<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); 
    } 
} 

例外はとにかくweb.xmlに次のようにカスタマイズすることができ、デフォルトのHTTP 500エラーページになってしまいます。この道を代わりにServletExceptionを投げるの

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

あるいは、あなたはまた、単に属性とFORWなどのエラーメッセージを設定することができます同じJSPに置き換えて、エラーをユーザーフレンドリーな方法で同じ形式で表示させます。一般的なアイデアはservlet wiki pageで入手できます。

+0

こんにちは、返信ありがとう... 私は春の技術MVCを私のプロジェクトに使用しているので、私はそのようなサーブレットを使用することはできません...どんなものであれ、アプリケーションクラス自体のJavaクラスエラーを投げていて、ビューがハングアップしています。私はあなたが話している問題を手に入れていると思います... –

+0

私はこれをどのように知っていたでしょうか?どの場所でアップロードされたファイルをどのように解析しているのか、どのフレームワークを使用していたのか、あなたの質問のどこにも言及していません。少なくとも、JSによる検証はできません。セキュリティ上の制約のため、ファイルメタデータへのアクセスはありません。 – BalusC

関連する問題