2011-09-21 53 views
2

我想從網頁上傳表單並直接將文件保存到S3,而無需先將其保存到磁盤。這個node.js應用程序將被部署到Heroku,在那裏沒有本地磁盤來保存文件。如何使用node.js強大的庫來接收上傳的文件並使用knox將其保存到Amazon S3?

node-formidable庫提供了一種上傳文件並將其保存到磁盤的好方法。我不知道如何首先關閉強大的(或連接形式)保存文件。另一方面,Knox庫提供了從磁盤讀取文件並將其保存在Amazon S3上的方法。

1)有沒有辦法掛鉤到強大的事件(在數據上)發送流到諾克斯的事件,以便我可以直接將上傳的文件保存在我的Amazon S3存儲桶中? 2)是否有任何庫或代碼片段可以讓我直接使用上傳的文件並使用node.js將其保存到Amazon S3?

還有一個類似的問題here但那裏的答案沒有解決不將文件保存到磁盤。

回答

3

看起來好像沒有好的方法來做到這一點。一個原因可能是節點強大的庫將上傳的文件保存到磁盤。我無法找到任何其他選擇。 knox庫將保存的文件保存在磁盤上,並使用Amazon S3憑據將其上傳到Amazon。

既然在Heroku上我無法在本地保存文件,我最終使用transloadit服務。雖然他們的authentication文檔有一些學習曲線,但我發現該服務很有用。

對於那些誰想要了解如何使用Node.js使用transloadit,下面的代碼示例可以幫助(transloadit頁面只有Ruby和PHP的例子)

var crypto, signature; 
crypto = require('crypto'); 
signature = crypto.createHmac("sha1", 'auth secret'). 
    update('some string'). 
    digest("hex") 
console.log(signature); 
+1

作爲transloadit共同創始人,我們現在也在我們的文檔中添加了一個節點示例https://transloadit.com/docs/api-docs#authentication – kvz

0

這是安迪,AwsSum的創造者:

我剛剛發佈此庫的v0.2.0。它上傳快報bodyParser()創建的,雖然像你說的,這不會在Heroku的工作文件:

但是,我必須看着加的能力,在下一個(v0.3.0)版本中,從強大的流直接傳送到S3。目前來看,看看它是否有幫助。 :)

+0

它看起來很簡單,但不知道爲什麼它不會工作Heroku的。期待v0.3.0,它允許我們將上傳的文件直接流式傳輸到Amazon S3。這應該是事件驅動和優化的低內存消耗。 – rafidude

+0

同意,這將是事件驅動。我將研究使用強大的express.bodyParser()的內容,我將複製其中的部分內容。手指交叉。 – chilts

+0

我決定不讓它流,而是從磁盤上去,因爲那樣會更容易重試。即使在磁盤上使用它,所有內容仍然流式傳輸,因此您不會使用太多內存:傳入請求 - >(流式傳輸)到磁盤 - >(傳輸)到S3。 :) – chilts

相關問題