3

Tomcat 6を使用して、画像のアップロードを許可するためにapachecommonsFileUploadを使用しています。setSizeMaxとsetFileSizeMaxを使用して最大ファイルを設定できます。しかし、大きなファイル全体がアップロードされてから、大きすぎるかどうかも確認されているようです。別の投稿によると、setSizeMaxはアップロードを遮断する必要があるようですが、それは私が得る動作ではありません。

これをテストするために、sizeMaxとfieSizeMaxを非常に低く設定し、かなり大きなファイルをアップロードしました。大きなファイルをほぼ瞬時に切り取るのではなく、アップロードするのに15秒かかりました。

何か案が?簡略化された例外句を含むいくつかのコードを次に示します。

    FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setFileSizeMax(30);
        upload.setSizeMax(28);
        List items = null;
        try {
            items = upload.parseRequest(request);
        } catch (Exception e) {
            out.println("exceeded max file size..");
            return;
        }

詳細:tomcatの使用6. maxPostSizeの設定は、content-type:multipart/form-dataでは機能しません。また、リクエストコンテンツの長さを再度確認するには、ファイル全体をアップロードする必要があります。最後に、FileUploadのsteaming apiを使用することも機能していないようです。これも、ストリームを閉じる前にファイル全体をアップロードする必要があるように思われるためです。サーブレットがバイトをディスクに書き込まない場合でも、アップロードは続行されます。画像のアップロードなどはWebアプリでは非常に一般的なタスクであるため、Tomcat6を使用して大量のアップロードを防ぐ方法が必要です。

4

2 に答える 2

1

サーバーにビットを保存するかどうかに関係なく、クライアントはビットを送信します。入力ストリームを強制的に閉じる以外に、サーバーがクライアントにビットの送信を停止するように指示する方法はありません (HTTP の性質のため、応答は要求に従います。それらは同時ではありません)。それを試すことはできますが、ほとんどのアプリケーション サーバーは、close() を実行するとクライアントから入力ストリームを排出するため、何も変わりません。

クライアントを制御でき、(Expect ヘッダーを介して) 100-Continue を使用する必要がある場合は、リクエストの Content-Length をスヌープし、100-Continue の代わりに否定応答を送信して拒否できる場合があります。

于 2012-05-26T01:18:49.533 に答える
0

Tomcat には、HTTP コネクタの maxPostSize 属性があります。Tomcat のドキュメントを参照してください

編集: multipart/form-data では機能しないのは残念です。アップロードを管理するために、署名付きアプレットまたは「Java Web Start」を使用することを検討しましたか?

于 2012-05-26T05:00:22.600 に答える