2016-04-05 32 views
1

這可能是不可能的,但我試圖使用pkgcloud模塊返回Rackspace上的圖像的緩衝區對象,而不必寫入文件系統。我已經看到過這個過程,但是這兩個例子都顯示了下載到文件系統的過程。使用pkgcloud從Rackspace下載獲取緩衝區

function get() { 
     return new Promise(function (resolve, reject) { 
      _this._RackClient.download(options, function(err, results) { 
       if (err !== null) { 
        return reject(err); 
        console.log("Errow Downloading:", err); 
       } 
       resolve(buffer); 
      }); 
     }); 
    } 
    return get(); 

這是理想情況下,我希望如何工作,但目前沒有請求中出現正文。我可以使用stream.passThrough()並返回類似於上傳緩衝區的內容嗎?

回答

1

.download()返回一個可讀流,所以它應該只是緩衝輸出的問題。例如:

var stream = _this._RackClient.download(options); 
var buf = []; 
var nb = 0; 
var hadErr = false; 
stream.on('data', function(chunk) { 
    buf.push(chunk); 
    nb += chunk.length; 
}).on('end', function() { 
    if (hadErr) 
    return; 
    switch (buf.length) { 
    case 0: 
     return resolve(new Buffer(0)); 
    case 1: 
     return resolve(buf[0]); 
    default: 
     return resolve(Buffer.concat(buf, nb)); 
    } 
}).on('error', function(err) { 
    hadErr = true; 
    reject(err); 
}); 
+0

這工作完美!謝謝你的回答! – mcclaskiem

+0

這工作正確獲取數據,但我好奇開關語句正在處理什麼,因爲它似乎不是正確的緩衝區。 @mscdex – mcclaskiem

+0

你的意思是「正確的緩衝區?」 'buf'只是在它們進來時存儲塊,'switch'只是一些優化,以避免調用'Buffer.concat()',除非必要。 – mscdex