我试图检索已发布到我们的nodejs服务器的图像,压缩它然后将其存储在mongodb中。我正在使用正在工作的imagemin,即它可以获取传入的图像,压缩它并将其存储到静态目标文件夹。但是,我想获取imagemin进程的输出并将该图像存储在mongo而不是目标文件夹中!
这是逻辑坐落在multer中间件内;
app.use(multer({
dest : './static/uploads/',
limits : {...
rename : function(fieldname, filename) {....
onFileUploadComplete : function(file) {
//var imagemin = new Imagemin().src(file.path).dest('./static/uploads/').use(compressionType);
var imagemin = new Imagemin().src(file.path).use(compressionType);
imagemin.run(function(err, files) {
if (err) {
return next(err);
}
console.log('Files optimized successfully!'); });
// DO SOME LOGIC HERE TO STORE IMAGE(S) TO MONGO
}
};
从阅读imagemin的FAQ,run()函数是处理图像的正确位置吗?这是存储在目标文件夹中的图像吗?
示例包含版本的package.json;
{
"name": "test-project",
"description": "Another Test",
"version": "0.0.1",
"engines": {
"node": ">= 0.10.x"
},
"private": true,
"dependencies": {
"express": "3.x",
"multer": "0.x",
"imagemin": "3.0.0",
"mongoose": "~3.8.8",
"mongoose-thumbnail": "0.0.1",
"mongoose-file": "0.0.2"
}
}
感谢任何帮助或指示。
Ĵ
答案 0 :(得分:1)
这可能不是您想要的答案 - 但您可能不想要在MongoDB中存储图像。数据库系统实际上并不意味着处理大型二进制文件(如图像)的存储。这是因为存储图像会占用大量磁盘空间,并且会大大减慢查询速度。
如果您要构建生产应用程序,您可能希望将图像文件存储到像Amazon S3这样的文件存储服务中:http://aws.amazon.com/s3/您可以使用多个库来执行此操作,包括官方支持的AWS节点库:http://aws.amazon.com/sdk-for-node-js/
现在 - 如果确实想要在MongoDB中存储图像,你可以这样做:
var imagemin = new Imagemin().src(file.path).use(compressionType);
imagemin.run(function(err, files) {
if (err) {
return next(err);
}
for (var i = 0; i < files.length; i++) {
var model = new MyMongooseModel({
image: files[i].contents, // files[i].contents is a Buffer that contains the image file's contents
...
});
model.save(function(err) {
if (err) {
return next(err);
}
});
}
});
这要求您使用Mongoose库来处理MongoDB:http://mongoosejs.com/