2017-06-28 68 views
0

假設我正在創建一個網站,用戶可以在其中註冊,登錄並查看彼此的個人資料。如何將配置文件圖片存儲在NodeJS和Mongodb中?

我已經創建了註冊,登錄和看到其他人的個人資料的功能,但是我不知道我怎麼可能添加唯一的每個用戶的個人資料照片。

這是我當前如何保存用戶數據。

mongoose.Schema({ 
username: { 
    type: String, 
    unique: true, 
    required: true 
}, 
email: { 
    type: String, 
    lowercase: true, 
    unique: true, 
    required: true 
}, 
password: { 
    type: String, 
    required: true 
} 
}); 

我應該在哪裏保存這些圖像?是否有可能將.png文件保存在mongodb中?

當我想看到我的HTML /視圖引擎的圖像,我會簡單地使用類似:

<img src="<%= user.image %>"> 

然後進行實際的圖像可以在我的文件保存的地方?

+0

爲什麼要使用MongoDB作爲對象存儲而不是(可能)Amazon S3?有一些具體原因? –

+0

爲什麼你想要發送二進制數據到模板渲染是一個更大的問題。您的模板只應關注指向圖像位置端點的URL,無論該端點是否解析爲從MongoDB或S3中檢索數據,或者文件系統實際上與模板呈現本身無關。讓瀏覽器獲取圖像。當輪子工作的很好時,不要重新制造輪子。 –

+0

其實..我不確定最好的辦法是做什麼。這是我第一次用Javascript來做一些事情。在PHP中,它是一樣簡單的https://www.youtube.com/watch?v=jvnRFsFwiT8,但我只是不知道如何在節點... – Sidexx

回答

2

有實現自己的目標三通。

  1. 直接MongoDB中保存現場(文件)

  2. 保存MongoDB中(GridFS的)直接場

  3. 上傳到AmazonS3和直接保存ID MongoDB中(文件)

1)只有少數情況下,你沒有太多的存儲空間(我從來沒有在生產環境中使用這個場景,但很多時候在測試中)。所以我不建議你朝這個方向前進。

2)它非常適合於大的圖像並在您需要添加一些「邏輯」。例如,我在過去的GridFS中使用「完整圖像」和調整大小的圖像列表(user1_120_90.png,user1_320_240.png)在相同的地方,並且由於延遲非常低而非常快地訪問它們。甚至更多我可以添加一些「自定義字段」存儲對象,然後進行查詢,以獲得我需要的東西,而無需與Amazon-S3交易。

3)非常可擴展的解決方案,爲您提供了一些優勢(因爲GridFS在成本方面較少擴展,因爲GridFS作爲「數據庫空間」收取費用,其中Amazon-S3作爲「僅對象存儲」在過去很多項目都在那裏,S3帶有一個易於使用和管理的NPM模塊。

對於您的場景,我可以建議您將數據庫從Object-Storage中分離出來。文件在亞馬遜,Azure,谷歌。如果那麼你必須處理非常低延遲的情況,也許你可以考慮GridFS(在我的情況下,交易是管理400Mln 3D圖像,並且有很多與它們相關的幾何圖形並存儲在GridFS內作爲元數據字段)

參考GridFS: https://docs.mongodb.com/manual/core/gridfs/

祝你好運!

相關問題