@zkrvndm
Боты, парсеры, расширения

Как распаковать zip-архив?

Для распаковки использую библиотеку JSZip, все бы хорошо, но у распакованного файла отсутствует MIME-тип!

Тестовый стенд для экспериментов: https://nadim.work/zip/
// Загружаем тестовый архив в виде обычного блоба:
blob = await (await fetch('https://nadim.work/zip/TestArchive.zip')).blob();

zip = new JSZip(); // Создаем объект для работы с архивами
await zip.loadAsync(blob); // Подгружаем ранее скачанный архив

// Распаковываем из архива один файл в виде бинарных данных:
binary = await zip['files']['Тестовый документ.docx'].async('blob');

// Создаем File из полученного бинарных данных:
file = new File([binary], 'Тестовый документ.docx');

// Выводим результат в консоли:
console.log('Результат распаковки:');
console.dir(file);

Может кто-нибудь сможет подсказать, как восстановить MIME-тип файла?

Что я уже пробовал делать

У меня была такая идея, попробовать записать файл в виртуальную файловую систему и прочитать его обратно, по моим предположениям операционная система должна автоматически присвоить правильный MIME-тип, но к сожалению это не сработало и MIME-тип так и не присвоился:
window.webkitRequestFileSystem(window.TEMPORARY, 10*1024*1024, function(fs) {
    
    fs.root.getFile(file.name, { create: true }, function (fileEntry) {

        fileEntry.createWriter(function (fileWriter) {

            fileWriter.onwriteend = function(e) {

                console.log('Успех!');

                fs.root.getFile(file.name, {}, function (fileEntry) {

                    fileEntry.file(function (new_file) {
                        console.log('Файл успешно записан и прочитан обратно:');
                        console.dir(new_file);
                    });

                });

            };

            fileWriter.onerror = function(e) {
                console.log('Ошибка:');
                console.dir(e);
            };

            fileWriter.write(file);

        }, function(err) {
            console.log('Ошибка:');
            console.dir(err);
        });

    }, function(err) {
        console.log('Ошибка:');
        console.dir(err);
    });

}, function(err) {
    console.log('Ошибка:');
    console.dir(err)
});

  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы