2011-03-02 50 views
3

這可能是很基本的,因爲文檔離開它......從諾克斯文檔:保存來自s3 w/nodejs&knox的傳入文件?

「下面是一個例子瞭解更多我們只是推在S3中的文件請求,並簡單地輸出響應狀態代碼,頭,與身體。」

client.get('/test/Readme.md').on('response', function(res){ 
    console.log(res.statusCode); 
    console.log(res.headers); 
    res.setEncoding('utf8'); 
    res.on('data', function(chunk){ 
    console.log(chunk); 
    }); 
}).end(); 

很簡單,但是如何將傳入數據保存爲本地文件?新的BufferList()什麼的?

我試圖建立一個'即時'圖像調整大小服務,從s3或cloudfront加載圖像,並根據請求返回大小。瀏覽器然後緩存大小的圖像,而不是從s3直接完整的圖像。當然,我需要這個基本的位首先工作!有任何想法嗎?

謝謝你們!

回答

2

它看起來不像knox支持流API,所以你不能使用stream.pipe()並獲得適當的背壓。但是,您的磁盤可能會比S3更快,所以這可能沒有關係。

在「響應」回調中,用文件系統模塊var outstream = fs.createWriteStream(filename);打開一個可寫的流。在「數據」回調中,請撥outstream.write(chunk);希望有一個「結束」回調,您可以使用關閉寫入流。

+0

優秀。非常感謝你! – pickaxe 2011-03-07 00:26:50

2

作爲替代上面的回答,您可以保存傳入文件緩衝像這樣:

var buffer = ''; 
client.get('/test/Readme.md').on('response', function(res){ 

    res.setEncoding('utf8'); 

    res.on('data', function(chunk){ 
    buffer += chunk; 
    }); 

    res.on('end', function(){ 
    // do something with the buffer such as save it to file, 
    // or directly resize the image here. 
    // eg. save to file: 
    fs.writeFile('downloaded_readme.md', buffer, 'utf8', function (err) { 
    }); 
    }); 

}).end(); 
+0

在兩個地方將'utf-8'設置爲'binary'適用於我的圖像。 – 2011-12-06 02:22:54

+0

是的,請求緩衝區駐留在內存中 - 只能用於「小」文件 – 2012-08-28 02:08:39