Как прочитать большой (> 300 МБ) файл изображения или видео через API файла javascript, сохранить его локально, получить и отобразить?

Мне нужно прочитать большой файл, который пользователь загружает с помощью API файла javascript. Поскольку этот файл огромен, чтение его как есть приводит к сбою браузера. Итак, я нарезаю файл, и он формирует массив больших двоичных объектов (может ли метод среза создать массив любого другого типа?).

JS-код:

var chunkSize = 100000; 
var currentStart = 0;
var currentEnd = Math.min(currentStart+chunkSize, file.size);
while(currentEnd != file.size){
        var blobPart = file.slice(currentStart, currentEnd);
        blobs.push(blobPart);
        currentStart = currentEnd+1;
        currentEnd =  Math.min(currentStart+chunkSize, file.size);
}

После этого у меня есть массив капель, известных как «капли». Как мне сохранить этот массив (я использую localforage (indexeddb)). В настоящее время я храню массив BLOB-объектов как есть.

JS-код:

    localforage.setItem(file.name,blobs,function(){
        localforage.getItem(file.name, function(err, value){
            var fullRetrievedBlobArray = [];
            var x = value;

        });     
    });

Может ли помочь его преобразование во что-то другое? Или я должен прочитать капли в массиве «blobs» и преобразовать их в один большой массив? (Если да, то как мне это сделать?).

После получения x будет содержать массив больших двоичных объектов, которые я хранил. Теперь как объединить этот большой двоичный объект, чтобы получить исходный файл в виде URL-адреса больших данных?

Снимок полученного массива 'blobs'

Если я загружу видео таким же образом? Как я могу объединить массивы больших двоичных объектов, чтобы сформировать URL-адрес данных для добавления к тегу атрибута видеотега html 5? Кроме того, может ли кто-нибудь дать небольшое объяснение высокого уровня того, как localforage хранит этот массив. Он прямо устанавливает?


person Akshay Shinde    schedule 20.01.2016    source источник


Ответы (1)


Конструктор больших двоичных объектов принимает смешанный массив буферов, строк и других больших двоичных объектов:

var hugeBlob = new Blob(blobs, {type: "video/mp4"});
document.getElementById("video").src = URL.createObjectURL(hugeBlob);
person Esailija    schedule 21.01.2016
comment
Спасибо, я наткнулся на эту информацию, но, как вы увидите, мои проблемы связаны с большими файлами. Если я объединим маленькие капли, чтобы сформировать большую каплю. Мне будет трудно перечитать это снова. Например, у меня есть массив больших двоичных объектов размером ~ 3500 каждый по 10 МБ (всего около 300 МБ). Когда я пытаюсь прочитать этот огромный блоб, браузер вылетает из строя. Есть ли способ читать большие блобы, чтобы они не приводили к сбою браузера? - person Akshay Shinde; 22.01.2016
comment
@AkshayShinde, вы бы не прочитали большой файл сразу в любой среде. Я бы сказал, что даже фрагменты размером 10 МБ излишне велики. Вы уже решили свою проблему чтения больших файлов: делайте это кусками. Я отвечал на ваш вопрос о том, как объединить фрагменты BLOB-объектов в один BLOB-объект. - person Esailija; 22.01.2016