私は私たちのサイトの新しいアプリケーションにXmlHttpRequestとFormDataを実装していますが、一部の顧客が一度に数万、場合によっては数十万のドキュメントをアップロードしようとする可能性があるという懸念があります。これらの条件をテストするという骨の折れる作業を行う前に、(1)一度にアップロードできるファイルの数、および/または(2)ファイルサイズに制限があるかどうかを誰かが知っていることを望んでいました。これらの機能を実装している最新のブラウザには制限があります。
1 に答える
ファイルサイズの制限は、コンテンツの長さ属性(通常はsignedまたはunsigned int、または約2GB / 4GB)を格納するためにブラウザーアプリケーションによって使用されるデータ型によって異なります。コンテンツの長さを確認し、特定のしきい値を超えるアップロードを拒否することで、サーバー側のコードに最大ファイルサイズ制限を課すこともできます。
一度にアップロードできるファイルの数は、ドメインごとに許可される接続の最大数によって異なります。詳細については、この質問を参照してください。したがって、すべてのファイルが一度にn個アップロードされます。
更新:
ブラウザがファイルシステムからTCP接続に直接ファイルをストリーミングするのか、それともメモリにバッファリングするのかわからなかったため、いくつかのテストを行いました。
ChromeとFFからFiddlerを介して非常に大きなファイルをアップロードしようとすると、コンピューターのブラウザープロセスのメモリ使用量は増加しませんが、Fiddlerプロセスはクラッシュする前に2GBに増加します(32ビットアプリケーション)。
したがって、サーバー上でファイルのコンテンツをデータストアに直接ストリーミングする場合、クライアントとサーバーのどちらでもメモリの問題が発生することはないと思います。
ほとんどのWebサーバーは、非常に大きな要求を受け入れるように構成する必要があることに注意してください。
また、ファイルごとに1つのXmlHttpRequestインスタンスを使用するようにしてください。1つの接続ですべてをアップロードすると、content-lengthはすべてのファイルの合計サイズに設定されます。
また、大きなファイルのアップロードを許可すると、サーバーがDoS攻撃に対して脆弱になることを覚えておいてください(おそらくこれはすでに知っていますが、言及する価値はあります)。