Разархивировать 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.
Может есть у кого опыт или готовое решение?