Как хранить изображения в базе данных MongoDB, а не только текст? Могу ли я создать массив изображений в базе данных MongoDB? Можно ли сделать то же самое для видео?
Подробнее о хранении таких двоичных данных см. в документах GridFS.
Поддержка вашего конкретного языка должна быть связана с нижней частью экрана.
"Вы всегда должны использовать GridFS для хранения файлов размером более 16 МБ" - Когда следует использовать GridFS?
MongoDB Документы BSON ограничены размером 16 Мб. Поэтому, если общий размер вашего массива файлов меньше этого, вы можете хранить их непосредственно в своем документе, используя тип данных BinData.
Видео, изображения, PDF файлы, электронные таблицы и т.д. - это не имеет значения, все они рассматриваются одинаково. До вашего приложения для возврата соответствующего заголовка содержимого контента для их отображения.
Подробнее см. документацию GridFS.
Вы можете попробовать следующее:
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();
http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb
В NPM имеется плагин Mongoose, называемый mongoose файлом. Он позволяет добавить поле файла в схему Mongoose для загрузки файлов. Я никогда не использовал его, но это может оказаться полезным. Если изображения очень маленькие, вы можете закодировать их Base64 и сохранить строку в базе данных.
Хранение небольших (под 1 МБ) файлов с помощью MongoDB в NodeJS БЕЗ GridFS
Вы можете использовать тип данных bin, если вы используете любой язык сценариев для хранения файлов/изображений в MongoDB. Данные бит разработаны для хранения небольших файлов.
Обратитесь к своему драйверу сценариев. Для PHP нажмите здесь.
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 Backend - Professional Recommended
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);
}
});
}
base64
, см stackoverflow.com/questions/11442356 я также нашел menge.io/2015/03/24/storing-small-images-in -Mongodb очень хорошая отправная точка.