2017-06-28 25 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に保存することも可能ですか?

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

そして実際の画像がどこかに私のファイルに保存されます私は単にのようなものを使用することになり、私のHTML /ビューエンジンで画像を見たいと思った

+0

Amazon S3の代わりにMongoDBをオブジェクトストレージとして使用したいのはなぜですか?何か特別な理由がありますか? –

+0

レンダリングするテンプレートにバイナリデータを送信したいのはなぜでしょうか?テンプレートは、エンドポイントがMongoDBやS3やファイルシステムからデータを取得することを解決するかどうかに関わらず、画像の場所のエンドポイントを指すURLだけに関係するものでなければならず、テンプレートのレンダリング自体とはまったく関係がありません。ブラウザにイメージを取得させます。ホイールがうまく動いてもホイールを再発明しないでください。 –

+0

実際には、これを実行する最良の方法は何か分かりません。 Javascriptでこれに近いものをやっているのは初めてのことです。 PHPではhttps://www.youtube.com/watch?v=jvnRFsFwiT8のような単純なものでしたが、Nodeでそれを行う方法がわかりません。 – Sidexx

答えて

2

目的を達成するには3つの方法があります。

  1. MongoDBの中に直接フィールドを保存します(文書)のMongoDB(GridFS)で直接

  2. 保存フィールドAmazonS3に

  3. アップロードやMongoDBの中で直接IDを保存(文書)

1)正直なところ、あなたはあまりストアをしていない(私はこのシナリオを本番環境では使用しませんが、テストには多くの時間を費やしています)。だから私はこの方向に進むことをお勧めしません。

2)大きな画像や、「ロジック」を追加する必要がある場合に理想的です。例えば、私は過去のGridFSで "完全なイメージ"を持ち、イメージのリストを同じ場所にリサイズ(user1_120_90.png、user1_320_240.png)し、待ち時間が非常に短いので非常に素早くアクセスしました。さらに、格納されたオブジェクトに「カスタムフィールド」を追加して、Amazon-S3との取引がなければ必要なものを正確に取得するためのクエリを作成できます。

3)GridFSは「データベース空間」としてAmazon S3に課金されるため、コスト面でGridFSに比べるとS3の方が膨大ではありません。以前は多くのプロジェクトが使用されていましたが、S3には使いやすく管理しやすいNPMモジュールが付属しています。

あなたのシナリオでは、データベースをObject-Storageから分離することをお勧めします。あなたが非常に短いレイテンシのシナリオに対処する必要があるならば、多分あなたはGridFSを考慮することができます(私の場合、400Mlnの3D画像をそれらに関連付けられた多くのジオメトリで管理し、GridFSメタデータフィールドとして)

リファレンスGridFS: https://docs.mongodb.com/manual/core/gridfs/

Good Luck!

関連する問題