2011-01-25 43 views
109

テキストだけでなくMongoDBデータベースに画像を保存するにはどうしたらいいですか? MongoDBデータベースに画像の配列を作成できますか?動画でも同じことが可能ですか?MongoDBデータベースに画像を保存

答えて

78

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

特定の言語のサポートは、画面の下部にリンクする必要があります。

+21

GridFSを推奨ドキュメント> 16メガバイトのためです。すべてのバイナリデータがこのように大きいわけではありません。その制限を超えることができないこと以外に、BinData型の代わりにGridFSを使用することで他にも利点がありますか? –

+1

動画は16MBを超える傾向がありますので、この回答はおそらく妥当です。しかし、これを言及する必要があります。 – Chanoch

46

"あなたはいつも16メガバイト以上のファイルを格納するためGridFSを使用する必要があります" - When should I use GridFS?

MongoDBのBSON documentsは16  メガバイトでキャップされています。したがって、ファイルの配列の合計サイズがそれより小さい場合は、BinDataデータ型を使用してドキュメントに直接格納できます。

動画、画像、PDF、スプレッドシートなど - 問題はありませんが、すべて同じ扱いです。適切なコンテンツタイプヘッダーを返すことはアプリケーションに任されます。

詳しくはGridFS documentationをご覧ください。

15

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

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

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

はマングース・ファイルと呼ばれるNPMで利用可能なマングースのプラグインがあります。ファイルアップロードのためにMongooseスキーマにファイルフィールドを追加することができます。私はそれを一度も使ったことはありませんが、役に立つと分かるかもしれません。 イメージが非常に小さい場合、Base64でエンコードして文字列をデータベースに保存できます。

Storing some small (under 1MB) files with MongoDB in NodeJS WITHOUT GridFS

5

あなたはMongoDBの内のファイル/画像を保存するために、任意のスクリプト言語を使用している場合は、ビンのデータ型を使用することができます。 Binデータは、小さなサイズのファイルを格納するために開発されています。

スクリプト言語のドライバを参照してください。 PHPでは、hereをクリックします。あなたのビューで

2
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の中で、単一および複数の画像を追加することができます。 nodejsバックエンドで画像を保存する

-5

ベストウェイ - プロフェッショナル

var async = require('async'); 
var accessPath = path.join(__dirname, "../uploadLocation"); 
var folderName = new Date().getTime(); 

async.auto({ 
         makeDir: function(next, results) { 
          makeDir(accessPath, folderName, next); 
         }, 
         writeFile: ['makeDir', function(next, results) { 
          writeFile(accessPath, folderName, req.body.user.ImgData, req.body.user.email, next); 
         }], 
        }, function(err, success) { 
         if (err) { 
          console.log("error occurs while saving image") 
         } else { 
          console.log("success", success) 

         } 
        }); 

    var makeDir = function(accessPath, folderName, next) { 
        try { 
         console.log("accessPath inside makeDir", accessPath, folderName) 
         fs.mkdirSync(accessPath + "/upload/user/" + folderName); 
         next(null, "done") 
        } catch (e) { 
         console.log("error in creating folder"); 
         next(e, "Err") 
        } 
       } 

       var writeFile = function(accessPath, folderName, ImgData, email, next) { 

        var userImgName = email + ".jpg"; 
        fs.writeFile(accessPath + "/upload/user/" + folderName + "/" + userImgName, ImgData, function(err, success) { 
         if (err) { 
          next(e, "Err") 
         } else { 
          console.log("success write file"); 
          next(null, null); 
         } 
        }); 
       } 
関連する問題