MongoDBデータベースに画像を保存する


174

テキストだけでなく、MongoDBデータベースに画像を保存するにはどうすればよいですか?MongoDBデータベースに画像の配列を作成できますか?ビデオについても同じことができますか?


1
短い答えは次のとおりです。はい、(小さい)画像をで正しくエンコードすれば保存できます。stackoverflow.com/ questions / 11442356base64参照してください。menge.io/ 2015/03/24 / storing - small - images - in-も見つかりましたmongodbは非常に良い出発点です。
B--rian

回答:


108

GridFSをご覧くださいこのようなバイナリデータの保存の詳細ドキュメントを参照してください。

特定の言語のサポートは、画面の下部にリンクされているはずです。


40
GridFSは、16MBを超えるドキュメント用です。すべてのバイナリデータがこれほど大きいわけではありません。その制限を超えることができること以外に、BinDataタイプだけでなく、GridFSを使用することの他の利点はありますか?
Brandon Fitzpatrick

3
ビデオは16MBを超える傾向があるため、この答えはおそらく妥当です。おそらくこれについて言及する必要があります。
Chanoch 2017

1
GridFSを使用するのではなく、他の解決策はありますか?
Abhishek Mani

1
@AbhishekManiもう1つの解決策は、MongoDBに保存しないことです。2018年には、AmazonのS3やAzure BLOBストレージなどにこのデータを書き込むのが非常に簡単になりました。
ゲイツ副社長、

MongoDBの
発言

64

「16MBを超えるファイルを保存するには、常にGridFSを使用する必要があります」- -GridFSはいつ使用する必要がありますか?

MongoDB BSONドキュメントの上限は16 MBです。したがって、ファイルの配列の合計サイズがそれより小さい場合は、BinDataを使用してドキュメントに直接保存できます。データ型。

ビデオ、画像、PDF、スプレッドシートなど-重要ではありません。すべて同じように扱われます。それらを表示するために適切なコンテンツタイプヘッダーを返すのはアプリケーション次第です。

詳細については、GridFSのドキュメントをご覧ください。


24

あなたはこれを試すことができます:

String newFileName = "my-image";
File imageFile = new File("/users/victor/images/image.png");
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
gfsFile.save();

13

http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb

NPMには、mongoose-fileと呼ばれるMongooseプラグインがあります。ファイルをアップロードするために、ファイルフィールドをMongooseスキーマに追加できます。使用したことはありませんが、役に立つかもしれません。画像が非常に小さい場合は、Base64でエンコードし、文字列をデータベースに保存できます。

GridFSなしでNodeJSにMongoDBを使用していくつかの小さな(1MB未満)ファイルを格納する


8

MongoDBにファイル/イメージを格納するためにスクリプト言語を使用している場合は、binデータ型を使用できます。Binデータは、小さなサイズのファイルを格納するために開発されました。

スクリプト言語ドライバーを参照してください。PHPについては、ここをクリックしてください


6

ライブラリの下にインストール

var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');

ur mongo dbに接続します。

mongoose.connect(‘url_here’);

データベーススキーマを定義する

var Item = new ItemSchema(
  { img: 
  { data: Buffer, contentType: String }
 }
);
var Item = mongoose.model('Clothes',ItemSchema);

ミドルウェアMulterを使用してサーバー側に写真をアップロードします。

app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));

DBに要求をポスト

app.post(‘/api/photo’,function(req,res){
var newItem = new Item();
newItem.img.data = fs.readFileSync(req.files.userPhoto.path)
newItem.img.contentType = image/png’;
newItem.save();
});

画像の配列を追加する場合はどうでしょう
Nikhil Patil

3
var upload = multer({dest: "./uploads"});
var mongo = require('mongodb');
var Grid = require("gridfs-stream");
Grid.mongo = mongo;

router.post('/:id', upload.array('photos', 200), function(req, res, next){
gfs = Grid(db);
var ss = req.files;
   for(var j=0; j<ss.length; j++){
     var originalName = ss[j].originalname;
     var filename = ss[j].filename;
     var writestream = gfs.createWriteStream({
         filename: originalName
     });
    fs.createReadStream("./uploads/" + filename).pipe(writestream);
   }
});

あなたの見解では:

<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">

このコードを使用すると、MongoDBに単一のイメージと複数のイメージを追加できます。


0

これは私のために働いた、

  1. CMDのこのディレクトリに移動します:-C:\ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. 次のコマンドを実行します:-mongofiles put image.jpg
  3. 私たちが使用する選択したファイルの場合:-db.fs.files.find.pretty()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.