HTML5 File API - нарезка или нет? - PullRequest
       12

HTML5 File API - нарезка или нет?

6 голосов
/ 29 сентября 2011

Есть несколько хороших примеров загрузки файлов на HTML5 Rocks , но есть кое-что, что мне не совсем понятно.

Насколько я вижу, пример кода о Нарезка файла получает определенную часть из файла, а затем читает ее.Как отмечается в примечании, это полезно, когда мы имеем дело с большими файлами.

В примере о мониторинге загрузки также отмечается, что это полезно при загрузке больших файлов.

Я в безопасности, не разрезая файл?Я имею в виду проблемы на стороне сервера, память и т. Д. В настоящее время Chrome не поддерживает File.slice(), и я не хочу использовать раздутый плагин jQuery, если это возможно.

Ответы [ 2 ]

5 голосов
/ 11 октября 2011

И Chrome, и FF поддерживают File.slice(), но к нему был добавлен префикс File.webkitSlice() File.mozSlice(), когда его семантика изменилась некоторое время назад. Есть еще один пример использования здесь для чтения части файла .zip. Новая семантика:

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

Вы в безопасности, не разрезая его? Конечно, но помните, что вы читаете файл в память. Учебник по HTML5Rocks предлагает фрагментирование загрузки как потенциальное улучшение производительности С некоторой приличной серверной логикой вы также можете упростить восстановление после неудачной загрузки. Пользователю не придется повторять попытку всего файла размером 500 МБ, если он потерпит неудачу на 99%:)

0 голосов
/ 29 мая 2012

Это способ нарезки файла для передачи в виде 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
...