Разархивировать zip без скачивания на диск.



  • Столкнулся с задачей, есть ссылка на файл - zip архив. Его нужно скачать, разархивировать и прочитать.
    Можно конечно скачать архив HTTP-клиент >> скачать на винт и использовать тот же 7-Zip, но это не интересно :D.

    Нашёл на npm интересную библиотеку adm-zip. И нагуглил код чтобы "загрузить zip файл из Интернета и разархивировать его в память без сохранения во временный файл." Для него ещё нужна библиотека request.

    var file_url = 'https://community.bablosoft.com/uploads/files/1522352901575-1.zip';
    
    var request = require('request');
    var fs = require('fs');
    var AdmZip = require('adm-zip');
    var http = require('http');
    var url = require('url');
    
    var options = {
        host: url.parse(file_url).host,
        port: 80,
        path: url.parse(file_url).pathname
    };
    
    http.get(options, function(res) {
        var data = [], dataLen = 0; 
    
        res.on('data', function(chunk) {
    
                data.push(chunk);
                dataLen += chunk.length;
    
            }).on('end', function() {
                var buf = new Buffer(dataLen);
    
                for (var i=0, len = data.length, pos = 0; i < len; i++) { 
                    data[i].copy(buf, pos); 
                    pos += data[i].length; 
                } 
    
                var zip = new AdmZip(buf);
                var zipEntries = zip.getEntries();
                console.log(zipEntries.length)
    
                for (var i = 0; i < zipEntries.length; i++)
                    console.log(zip.readAsText(zipEntries[i])); 
            });
    });
    

    Но безуспешно, в переменных пусто. Пойду мучить await.
    Может есть у кого опыт или готовое решение?


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.