ファイル全体を転送せずに、JavaScript(またはJava)でアップロードされるファイルのサイズを制限するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/158149

質問

JSPページからアップロードされるファイルのサイズが設定されたサイズ制限を超えているかどうかをクライアント側のブラウザーで検証する方法はありますか?

可能であれば、FlashやActiveXなどの独自のコントロールやテクニックには近づかないようにしたい。

ありがとう!

役に立ちましたか?

解決

これは完全な解決策ではありませんが、 request.getHeader(" Content-Length")でContent-Length HTTPヘッダーをチェックすると、ファイル全体を転送しないことを選択できます。

説明として、非常に大きなファイルは一度に転送されません。あなたは実際にそのPOSTデータのチャンクを表すストリームを開き、転送されるもの全体のためにそこから読み込む必要があります。

一方、サービス拒否攻撃が心配な場合は、Content-Lengthヘッダーを簡単に偽造できるため、本当に信頼することはできません。この場合、制限を設定し、このファイルの転送をストリーミングして、制限を超えたらすぐに停止する必要があります。

他のヒント

Flashの決定を再検討し、YUIアップローダーをご覧になることをお勧めします。

http://developer.yahoo.com/yui/uploader/

とりわけ、fileSelectイベントは、選択されたファイルのサイズを、選択された直後からアップロードされる前にバイト単位で通知するため、それに応じて制限することができます。

JSPまたはPHPを使用すると、アップロードが完了するまでページがリクエストを取得できないため、ファイルサイズを制限できません。その時点で、ファイルを保存しないことを決定できますが、手遅れになる可能性があります。

いくつかのJavaソリューションがあります。 MyUploader またはエルメス。複数のファイルのアップロードと部分的なアップロードの再開をサポートするものもあれば、ソースコードを提供するものもあります。独自に作成することもできますが、ローカルファイルシステムにアクセスする必要があるため、機能するには署名付きアプレットである必要があります。 ApacheをWebサーバーとして使用している場合、特定の時間にアップロードされるすべてのファイルのメモリにファイルサイズ全体を収めるのに十分なRAMがマシンに必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top