【问题标题】:ExpressJS: Retrieving images from MongoDB and displaying them in JadeExpressJS:从 MongoDB 中检索图像并在 Jade 中显示它们
【发布时间】:2012-09-22 20:22:57
【问题描述】:

我正在寻找从 MongoDB 检索图像并显示它们的好方法。例如,要检索个人资料图片并将其显示在个人资料页面上,我目前是这样做的:

个人资料页面

block content
  h1= session.user.name
  img(src='/avatars')

路线

exports.avatars = (req, res) ->
  users.find req.session.user, (err, user) ->
    if user
      res.writeHead('200', {'Content-Type': 'image/png'})
      res.end(user.avatar.data, 'binary')
    else
      res.locals.flash = err
      res.render('index', {title: 'Home'})

基本上我会渲染个人资料页面,img 标签会向服务器发送一个请求,从数据库中获取用户的图片。我将图像保存为 MongoDB 中的 BinData。不使用GridFS,因为我希望图片很小。

有没有更好的方法来做到这一点?我尝试使用res.render('users/show', {picture: data}) 将图像数据直接发送到玉视图,但img 标签不喜欢这样,我不清楚为什么。这种方法是死胡同吗?

任何 cmets/建议将不胜感激。谢谢!

【问题讨论】:

    标签: image node.js mongodb pug express


    【解决方案1】:

    如果

    直接将图像数据发送到玉视图将起作用

    a)你对图像数据进行了base64编码

    b) 以“数据:”为前缀

    但我不建议您这样做,您实际上是在 html 中嵌入图像。

    您应该创建一个单独的路由来处理您的图像/头像。

    例如,你的头像的图像源应该是这样的

    img(src='http://mydomain.com/avatars/user1.jpg')
    

    当浏览器请求此图像时,您会使用从 mongo 检索到的图像数据进行响应。

    【讨论】:

    • 感谢您的回答。我理解你在说一张图片,但如果我需要显示一整套图片和文字怎么办。我如何才能获得所有这些信息?
    • 好吧,那么您将拥有大量的 img 标签以及您需要显示的任何文本。然后,这些标签中的每一个都会从 images/avatars 路由中请求适当的图像。
    • 但是在页面渲染的时候,不知道会有多少图片。例如,可能一个用户在数据库中存储了很多他朋友的照片,我想在他的个人资料页面上显示这些照片......
    • 您首先需要查询数据库以计算给定用途有多少图像。因此,您会生成适当数量的图像标签。最后浏览器会请求这些图片,它们会显示在页面上。
    • 我认为您将图像/BinData 与显示图像所需的初始标记混淆了。这就解释了为什么您在标题中提到“用玉显示图像”。
    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多