@yrsmir said in Проверка на вирусы:
все нашел но хочется чистого..ок
вроде этого можно добиться подписав программу.
стоимость подписи смотреть в интернете.(ввести в поиск Code Signing price)
всё ещё нужен чистый или уже передумали?
Столкнулся с задачей, есть ссылка на файл - 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.
Может есть у кого опыт или готовое решение?
@fox ОЗУ не жалько? Блин заметил 21.3 что стал таким трудным( иа понимаю это все ради @senerg и других пользователей, Но как напрягает робить с модулями распозналки в нем. Нашел баг, не баг хз) Кароч если сравнивать и он знает одну одну переменную, а вторую нет или она указанна неверное (что чаще) он начинает и вылетает. Совсем наглухо закрывает открытый экземпляр баса. Остальное не трогает, но этот ажна через винду ломится закрывать и не спрашивает.
Ну мож это у меня так. Я не в курсе.
@fox а как разархивировать через бас?
Через ноду, например через вот этот модуль https://www.npmjs.com/package/node-zip
@Fox said in Разархивировать zip без скачивания на диск.:
var request = require('request');
не могу установить этот модуль, в поиске его даже не находит http://prntscr.com/ra9d1y
@graf said in Разархивировать zip без скачивания на диск.:
@Fox said in Разархивировать zip без скачивания на диск.:
var request = require('request');
не могу установить этот модуль, в поиске его даже не находит http://prntscr.com/ra9d1y
Он уже установлен
@Fox said in Разархивировать zip без скачивания на диск.:
Он уже установлен
@GhostZ said in Разархивировать zip без скачивания на диск.:
нужно просто добавить var request = require('request');
http://prntscr.com/ra9htp всё установлено. в папке с модулями он присутствует. может как-то можно удалить всё, чтобы после перезапуска заново скачалось?
UPD: Очистил всё по пути BrowserAutomationStudio\apps\22.5.0\embedded
не вылечилось
@graf said in Разархивировать zip без скачивания на диск.:
Проверил у товарища, всё тоже самое. что я делаю не так?) или это массовая проблема?)
await(new Promise((resolve, reject) => {
const request = require('../../node_modules/npm/node_modules/request');
request("https://www.google.com", function (err, res, body) {
console.log("err: " + err)
console.log("res: " + res)
console.log("body: " + body)
resolve()
})
}));
Тестовый скрипт
ты должен получить zip archive как Stream
и потом этот Stream выдает события например файлы итд
открываешь соединение и как только получил что нужно закрываешь Stream
например .destroy
я сделал утилиту которая читает вложенные файлы из zip gz архивов,
это для еластика и там огромные файлы по 100+gb есть
поэтому можно прочитать первые 10к строкиз gz файла который находится
в зип архиве который находится в другом зип архиве итд.
или прочитать рекурсивно первые n cтрочек всех текстовых файлов из всех архивов из директории рекурсивно без разархивации.
пример(stream может быть локальный файл или удаленный)
const streamToString = async (
stream: Stream.Readable,
opts: {
maxLines?: number
},
): Promise<string> => {
const { maxLines } = opts
let nLine = 0
const lines: string[] = []
const writable = es.mapSync((line: string) => {
if (nLine >= 0 && nLine % 1e3 === 0) logdebug('nLine: %s', nLine)
if (line) {
lines.push(line)
nLine++
if (maxLines && nLine >= maxLines) {
// logdebug('streamToString::complete')
writable.end()
}
}
})
await new Promise((resolve, reject) => {
stream
.pipe(es.split())
.pipe(writable)
.on('error', err => {
logdebug('error:streamToString %O', err)
reject('Error during untar for : ' + err)
})
.on('end', async () => {
// logdebug('stream:end')
resolve()
})
})
return lines.join('\n')
}
использовал https://github.com/antelle/node-stream-zip
@Fox said in Разархивировать zip без скачивания на диск.:
Тестовый скрипт
Не совсем понял, что именно делает тестовый скрипт?
Можно для нубов пояснить? :)
@AngelOfAncient said in Разархивировать zip без скачивания на диск.:
@Fox said in Разархивировать zip без скачивания на диск.:
Тестовый скрипт
Не совсем понял, что именно делает тестовый скрипт?
Можно для нубов пояснить? :)
Я не помню уже, но судя по прикреплённому коду это просто проверка модуля "request". Код отправляет get-запрос на страницу https://www.google.com и выводит в консоль результаты
@Fox said in Разархивировать zip без скачивания на диск.:
Через ноду, например через вот этот модуль https://www.npmjs.com/package/node-zip
Скачал модуль. Копирую из мануала:
var zip = new require('node-zip')(data, {base64: false, checkCRC32: true});
console.log(zip.files['test.file']); // Hello there
В моём случае это:
var zip = new require('node-zip')("ZIP/1.zip", {base64: false, checkCRC32: true});
console.log(zip.files['"ZIP/1.zip"']);
Выдаёт в логе "Error: Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html".
Смысл ошибки - он не распознаёт файл архива как архив?
И даёт ссылку уже на другой (?) пакет JSZip, где ещё всё более загадочно.
var zip = new require('node-zip')([[FILE_CONTENT]], {base64: false, checkCRC32: true});
var zip = new require('node-zip')([[FILE_CONTENT]], {base64: true, checkCRC32: true});
console.log(zip.files['test.file']); // Hello there
Некоторое время висит-работает, потом выдаёт в лог Undefined.
В этом случае не понятно, куда он распаковывает эти файлы, если распаковывает.
...
В сухом остатке, если есть под рукой тестовый скрипт разархивации Zip через Ноду (Не на лету, а обычным способом со скачиванием) - думаю, многим будет актуально.