0

私は次のものを持っています:

HTML

<input id="files" name="files" type="file" multiple="multiple" />
<button id='subButton' type='submit'>Upload (0) files</button>

Javascript

$("#files").change(function(evt) {
    debugger;
    $("#subButton").text("Upload (" + evt.target.files.length + ") files");
});

この Fiddleで実際に動作しているのを見ることができます。1,700 個のファイルを選択すると、コードは正常に機能し、正しいファイル数が evt.target.files.length によって返されます。ただし、ディレクトリ内のすべてのファイル (2279 -- 合計サイズ 210MB) を選択すると、evt.target.files.length は 0 を返します。

File API には、あいまいなファイル制限がありますか?

私のweb.configには次のものがあります: maxRequestLength="700000" これは、指定されたサイズのファイルを処理する必要があります。ただし、サーバーに何も送信されていないという点で、これはサーバー側の問題ではなくクライアントのようです。

何か案は?

4

1 に答える 1

1

これは HTML5 ファイル API の制限ではなく、ブラウザーの実装またはオペレーティング システムの制限です。

たとえば、Windows Vista で Firefox をテストしたところ、選択できるファイルの数に事実上制限がないように見えました (10,000 までテストしました)。Chrome では、選択したファイルのうち 3758 個が返されたようです。

違いは、Firefox はIFileOpenDialog選択したファイルを列挙として返す新しいインターフェイスを使用しているのに対し、Chrome はGetOpenFileName固定サイズのバッファに依存する古い API を使用しているようです。バッファーが十分に大きくない場合、エラーが返されるはずですが、Vista では切り捨てられ、わずかに破損したデータが返されるだけです。

興味深いことに、Chrome によって返されたファイルの数と、テストに使用したファイル名の知識から、使用されているバッファー サイズはおそらく 32768 であると推測できます。

Windows 7 または 8 をGetOpenFileName使用しており、バッファ サイズを超えるとエラーが返されるように API が修正されていると思います。そのため、あまりにも多くのファイルを選択すると、ブラウザーは切り捨てられたデータを処理しようとせず、0 を返します。

正確な制限は、ファイル名の長さとそれらのファイルを含むディレクトリのパスに基づいています。

他のオペレーティング システムには明らかにこれらの制限はありませんが、ファイル選択 API の設計によっては独自の問題が発生する可能性があります。

于 2013-07-02T10:22:02.120 に答える