7

HTML5 Rocksでのファイルのアップロードに関するいくつかの良い例がありますが、私には十分に明確でないものがあります。

私が見る限り、ファイルのスライスに関するサンプル コードは、ファイルから特定の部分を取得してから読み取ります。注が示すように、これは大きなファイルを扱う場合に役立ちます。

アップロードの監視に関する例では、これが大きなファイルをアップロードするときに役立つことも示しています。

ファイルをスライスしなくても安全ですか? サーバー側の問題、メモリなどを意味します。Chrome はFile.slice()現在サポートされておらず、可能であれば肥大化した jQuery プラグインを使用したくありません。

4

2 に答える 2

6

Chrome と FF の両方がサポートされていますが、セマンティクスが少し前に変更されたときのFile.slice()ようにプレフィックスが付けられています。これを使用して .zip ファイルの一部を読み取る別の例を次に示します。新しいセマンティクスは次のとおりです。File.webkitSlice() File.mozSlice()

Blob.webkitSlice( 
  in long long start, 
  in long long end, 
  in DOMString contentType 
); 

切らなくても大丈夫?わかりましたが、ファイルをメモリに読み込んでいることに注意してください。HTML5Rocks チュートリアルでは、アップロードをチャンク化することで、パフォーマンスが向上する可能性があります。適切なサーバー ロジックを使用すると、失敗したアップロードからの回復などをより簡単に行うこともできます。99% で失敗した場合、ユーザーは 500MB のファイル全体を再試行する必要はありません:)

于 2011-10-11T16:23:56.740 に答える
0

これは、ファイルをスライスしてBLOBとして渡す方法です。

function readBlob() {
    var files = document.getElementById('files').files;
    var file = files[0];
    var ONEMEGABYTE = 1048576;
    var start = 0;
    var stop = ONEMEGABYTE;

    var remainder = file.size % ONEMEGABYTE;
    var blkcount = Math.floor(file.size / ONEMEGABYTE);
    if (remainder != 0) blkcount = blkcount + 1;

    for (var i = 0; i < blkcount; i++) {

        var reader = new FileReader();
        if (i == (blkcount - 1) && remainder != 0) {
            stop = start + remainder;
        }
        if (i == blkcount) {
            stop = start;
        }

        //Slicing the file 
        var blob = file.webkitSlice(start, stop);
        reader.readAsBinaryString(blob);
        start = stop;
        stop = stop + ONEMEGABYTE;

    } //End of loop

} //End of readblob
于 2012-05-29T10:15:33.870 に答える