2016-07-28 25 views
0

我試圖簡單地從源文件(Salesforce)讀取.tar.gz文件並將其保存到磁盤。我正在使用Node(5.6.0)中的jsforce庫連接到Salesforce。當我檢索一個.txt文件並保存時 - 它可以正常工作,沒有任何問題。無法從Node.js中的二進制緩衝區創建.tar.gz文件

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和streamifier將我的Buffer轉換爲Stream,但它不起作用。我也嘗試了流緩衝區,但是我遇到了同樣的問題。

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文件,然後還有的建議似乎沒有幫助。

+0

您將需要使用像archiver一樣的歸檔庫來處理tar文件。 – dnak

回答

-1

你的情況的問題是你想要一個字符串或緩衝區被壓縮並寫入一個zip文件,而變量'read'實際上是一個正常的緩衝流,而不是一個壓縮的。

同樣,tar.gz模塊和targz()函數的問題是它既沒有提供將普通數據寫入壓縮流的機制,也沒有提供文檔中的清晰度。我花了一些時間閱讀文檔,並意識到它只能用於文件和文件夾,而不能用於內存數據。

如果您使用節點基礎中的zlib模塊,您的問題可以輕鬆,乾淨地解決。

#cat t.js 
var fs = require('fs'); 
var zlib = require('zlib'); 

var str = 'hello compressed world!'; 
zlib.gzip(str, function(err, buffer) { 
    if(err) { 
    console.log(err); 
    return; 
    } 
    fs.writeFile('./foo.gz', buffer, function(err, b) { 
    if(err) { 
    console.log(err); 
    return; 
    } 
}); 
}); 
#node t.js 
#file foo.gz 
foo.gz: gzip compressed data, from Unix 
#gunzip foo.gz 
foo already exists -- do you wish to overwrite (y or n)? y 
#cat foo 
hello compressed world!# 

希望這可以幫助你的情況。

+1

感謝這裏的信息 - 這有點幫助,但我真正的問題是,我有這個二進制數據已經從我的HTTP請求進來,並調用zlib.gzip沒有意義,因爲它已經gzip。我也試過zlib.inflate/unzip,然後試圖將結果寫入文件,但是我得到了類似的錯誤:{[錯誤:不正確的頭檢查] errno:-3,代碼:'Z_DATA_ERROR'} –

相關問題