Я пытаюсь просто прочитать файл .tar.gz из источника (Salesforce) и сохранить его на диске. Я использую библиотеку jsforce в узле (5.6.0) для подключения к Salesforce. Когда я извлекаю .txt-файл и сохраняю его - он отлично работает без проблем.Невозможно создать файл .tar.gz из двоичного буфера в Node.js
conn.requestGet('/services/data/v37.0/sobjects/ContentVersion/XXXX/VersionData', {}, function(err, data) {
var bitmap = new Buffer(data, 'binary');
fs.writeFileSync('new_file.txt', bitmap, {
encoding: 'binary'
});
});
Но у меня возникают проблемы при попытке сохранить файл как .tar.gz. Если я использую тот же fs.writeFileSync - тогда файл будет сохранен, но он не в правильном формате, и я не могу его открыть. В нижеприведенном коде я использую tar.gz и потоковое устройство для преобразования моего буфера в поток, но он не работает. Я также попробовал потоковые буферы, но у меня такая же проблема.
conn.requestGet('/services/data/v37.0/sobjects/ContentVersion/XXXX/VersionData', {}, function(err, data) {
var bitmap = new Buffer(data, 'binary');
var read = streamifier.createReadStream(bitmap);
var write = targz().createWriteStream('new_file.tar.gz');
read.pipe(write);
});
Ошибки я получаю:
events.js:154
throw er; // Unhandled 'error' event
^
Error: incorrect header check
at Zlib._handle.onerror (zlib.js:363:17)
Моя проблема кажется похожа на Node.js: Download file from s3 and unzip it to a string, но так как я использую .tar.gz файлы, то предложения там, кажется, не поможет.
Для работы с файлами tar вам понадобится библиотека архивирования, такая как 'archiver'. – dnak