2011-12-16 63 views
0

我在想什麼是將圖像上傳到S3並將圖像文檔保存在mongodb中的正確方法。在s3上保存圖像並在mongodb上保存相應的對象?

我到目前爲止實現的邏輯是這樣的:

  • 用戶上傳的圖像通過一個形式(的NodeJS)
  • 的圖像文件是在同一時間,我生成保存到S3
  • 一個圖像文件,也有圖像url上傳到S3

一切運作良好,但我希望能夠使用mongodb文檔的objectID命名圖像,然後上傳到S3。

所以,我怎麼能得到MongoDB的圖像文檔的的objectID所以後來我可以使用OBJECTID命名的圖片,一些臨客:03scc8399n39n.png

的問題是,直到我保存在MongoDB中的圖像文檔我沒有OBJECTID這樣的話是否意味着我必須做一些事情,如: - 保存圖像文件在MongoDB中 - 找到它 - 通過獲取只是保存在芒果的doc和讀取其ID獲得獨特的OBJECTID - 使用id來命名圖像 - 只需上傳到S3

圖像的URL更新圖像文檔

這個問題是我必須保存,查找更新,將文檔保存在mongodb中,而不是僅僅創建對象並將其保存到mongodb中......我想我沒有以最好的方式來處理這個問題我缺乏經驗。

什麼是S3存儲圖像,MongoDB中跟蹤他們,並使用文檔ID作爲圖像名稱的更好的辦法?

謝謝

回答

1

在保存文檔之前,實際上確實有_id值。所有驅動程序的工作方式是在執行保存之前,他們添加新創建的ObjectID實例並將其分配給文檔的「_id」字段。換句話說,如果你爲保存的文檔提供一個_id值,那麼save命令實際上是一個更新,如果你不這樣做,它只是一個帶有新創建的ObjectID實例的插入。

因此,所有你需要做的是(僞):

myImageDoc = new ImageDoc(); 
imageId = new ObjectID(); 

myImageDoc._id = imageId; 
db.images.save(myImageDoc); 

myPng = imageId + ".png"; 

或(因爲大多數司機延伸,以與_id值集文檔實例):

myImageDoc = new ImageDoc(); 

db.images.save(myImageDoc); 
imageId = myImageDoc._id; 

myPng = imageId + ".png"; 

我m不是JavaScript專家,因此您必須根據需要將其翻譯爲該語言。

+0

工作。謝謝。我使用.save()保存圖像對象,使用.save()然後就像你解釋的_id字段現在有id mongodb分配給對象,然後我可以用它來命名圖像。 – zumzum 2011-12-16 22:08:20