javascript - 如何使用 mongoose.js 驱动程序和 express.js 在 mongodb 中保存和查询图像等二进制数据?

标签 javascript image node.js mongodb express

你好我的问题是关于如何在我的 mongodb 存储中保存和查询图像我知道插入字符串的基本方法,创建,更新和删除它但是当我尝试保存时

var UserSchema=new Schema({
    username:String,
    img:{ data: Buffer, contentType: String }
}); //UserSchema

var modelo=mongoose.model('reserv',UserSchema)//model DB

app.post('/upload',function(req,res){
    var img=req.files.imagen

    var imagen=new modelo ({
        username:'name',
        img:{
            data:fs.readFileSync(img.path),
            contentType:img.type,
        }   
    }).save(function(err,docs){
        if(err){
            console.log(err);
        }else{
            console.log('saved');
            res.redirect('/profile')
        }
    }); //return  img saved like binary format 'BJSON' [BSON][1] some thing iVBORw0KGgoAAAANSUhEUgAAB4AA.....

});

到目前为止一切顺利,但现在当 intentento 读取数据库中的图像存储时,wing 二进制格式几乎不可能使用这种格式,因为这种格式是由巨大的字符组成的,并且不知道如何解码它更易于管理,可以在 jade View 中使用或者 express.js 的 ejs 模板引擎,如果有人知道如何解码或压缩,那将是一个很大的帮助:)

app.get('/profile',function(req,res){

    modelo.findOne({username:'que'},function(err,docs){
        if(err) return err;
        res.render('perfil',{info:docs.img.data})
    });

});

具体问题是我需要知道如何将二进制格式图像文件中的数据转换为类似服务或失败的小 url。

最佳答案

您应该使用 GridFS 来保存您的文件,然后为该文件提供一个单独的端点。在您的页面呈现上,您应该生成一个获取该文件的 url。

上传时我强烈建议stream从请求到数据库和下载时的文件目录,直接流回响应。

有一些 modules帮助你解决这个问题。 express-file-store看起来是一个很好的实现。由于它支持多个后端,您可以根据配置更改它(在开发中使用文件系统,在生产中使用 gridfs,如果有任何机会决定更改后端,则可以轻松将其更改为 S3)。

关于javascript - 如何使用 mongoose.js 驱动程序和 express.js 在 mongodb 中保存和查询图像等二进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23576639/

相关文章:

javascript - 如何在 <script> 标签内的表单中添加更多输入

html - 将图像作为背景图像,将自身拉伸(stretch)到页面末尾

node.js - 在 node/sails js 中启用 session 恢复

javascript - 异步调用的nodejs循环

对象内的 JavaScript 对象

javascript - 无法获取用户的邀请总数

javascript - 如何在 JS 中将对象转换为数组列表

css - 为什么显示的图像比应有的大?

html - 在保持比例的情况下在 html 中生成 "thumbnail"

node.js - 使用 Twilio 和 Meteor 回复短信