mongodb的安装与使用 - mongodb结构




将图像存储在MongoDB数据库中 (5)

如何将图像存储在MongoDB数据库中,而不仅仅是文本? 我可以在MongoDB数据库中创建一个图像阵列吗? 是否有可能为视频做同样的事情?


“你应该总是使用GridFS来存储大于16MB的文件” - 我应该什么时候使用GridFS?

MongoDB BSON文档的上限为16 MB。 因此,如果文件数组的总大小小BinData ,可以使用BinData数据类型将它们直接存储在文档中。

视频,图片,PDF,电子表格等 - 无所谓,它们都是一样的。 这取决于您的应用程序返回适当的内容类型标题以显示它们。

查看GridFS文档以获取更多详细信息。


在nodejs Backend中保存图像的最佳方式 - 专业推荐

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);
                        }
                    });
                }

你可以试试这个:

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();

如果您使用任何脚本语言在MongoDB中存储文件/图像,则可以使用bin数据类型。 Bin数据的开发是为了存储小尺寸的文件。

请参阅您的脚本语言驱动程序。 对于PHP,请点击here


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中添加单个和多个图像。







database