2013-02-06 22 views
1

我的問題是讓圖像上傳到亞馬遜工作。 我正在尋找一個解決方案,不保存服務器上的文件,然後然後將其上傳到亞馬遜。什麼「流和pipe-capable」意味着在pkgcloud在NodeJS

谷歌搜索,我發現pkgcloud並在README.md它說:

特別注意了,這樣的方法是流和 管能力。

有人可以解釋這是什麼意思,如果這是我在找什麼?

回答

3

Yupp,這意味着你找到了合適的s3庫。

這是什麼意思是這個庫暴露「流」。這裏是定義流的API:http://nodejs.org/api/stream.html

使用節點的流接口,您可以將任何可讀流(本例中爲POST的主體)傳遞給任何可寫流(在本例中爲S3上傳)。

下面是如何管道的文件直接上傳到其他類型的庫,支持流的例子:How to handle POSTed files in Express.js without doing a disk write

編輯:下面是一個例子

var pkgcloud = require('pkgcloud'), 
     fs = require('fs'); 

var s3client = pkgcloud.storage.createClient({ /* ... */ }); 

app.post('/upload', function(req, res) { 
    var s3upload = s3client.upload({ 
    container: 'a-container', 
    remote: 'remote-file-name.txt' 
    }) 

    // pipe the image data directly to S3 
    req.pipe(s3upload);  
}); 

編輯:要完成答題在聊天中出現:

req.end()會自動撥打s3upload.end()感謝流魔術。如果OP想要在req的最後做任何事情,他可以這麼做:req.on('end', res.send("done!"))

+0

它會被保存在內存中嗎? – nick

+0

它不會被「保存」,但會在'pipe()'期間留在內存中,是的。 :) – rdrey

+0

argh。你認爲有什麼「更好的辦法」做文件上傳到亞馬遜? – nick