2016-07-15 5 views
3

私は、SpringのCommonsMultipartResolverを使って、サーブレット3環境でファイルのアップロードを処理しています。小さなファイルをアップロードするときにFileUploadBaseがマルチパートの部分を見つけられない

アップロードされたファイルが大きい場合、すべて正常に動作します。

アップロードされたファイルが小さければ、リゾルバはパーツの検出に失敗します(例外はスローされません)。

これはfindNextItem()メソッドがfalseを返すapache.commons.fileupload.FileItemIteratorImplの方法で、これを追跡していますが、投稿に複数の有効な部分があるにも関わらずです。これにより、コントローラメソッドでMultipartFileオブジェクトを使用できなくなります。

HttpServletRequestでデバッガを見ると、正しい部品番号(getParts()が正しい部品番号を返します)が表示されます。

は、私はちょうどそれは、大きなファイルのために(> 1メガバイト)、例外が最大ファイル・サイズについてスローさ除き、HttpServletRequestを使用することができます(私は成功しCommonsMultipartResolver用に設定されているが、明らかにHttpServletRequestに渡るしません)。

サーブレット3の最大ファイルサイズを設定しようとしましたが、アプリケーションにそのサイズを設定するためだけにいくつかの新しいクラスを追加したくありません。

サーブレット3とcommons-fileuploadを使用して小さいファイルをアップロードする方法はありますか?

詳細

IはmaxUploadSizePerFile = 100メガバイトとしてcommons-fileuploadを設定しています。

次の動作結果:

は、アップロードされたファイルがされている場合は> 10メガバイト、その後、commons-fileuploadプロセスは、すべてが細かいです。

アップロードされたファイルが〜3.8MBと10MBの間にある場合、commons-fileuploadがブラウザーで接続リセットメッセージにつながる要求を解析する機会がある前に、入力ストリームとその基礎となる接続が閉じられます。

アップロードされたファイルが1 MB〜3.8 MBの場合、入力ストリームはクローズされますが、基本接続ではないため、エラーページにエラーが表示されます。

最後に、アップロードされたファイルが1 MB未満の場合、commons-fileuploadが呼び出される前に、基礎となるサーブレット3の実装が正常に処理され、要求に部品がないと考えています。

答えて

0

この動作は、以前は私に知られていなかったSpring Bootを使用した結果、Servlet 3のマルチパートを自動的に設定します。HttpServletRequestは、commons-fileuploadにチャンスがある前にファイルアップロードを処理します。

この時点で不思議な点は、アップロードされたファイルが十分に大きければ失敗しないことです。

関連する問題