Node.js-使用ejs显示以二进制数据形式保存在mongodb中的图像

问题描述

我很难显示从mongoDB检索到的图像,并将其保存为二进制数据。我正在使用Multer将图像存储到数据库。图像已正确存储到数据库中,但是当我尝试显示它们并将它们隐秘到base64时,出现了此错误:无法读取未定义的属性'toString'...

这是我的代码

var storage = multer.diskStorage({
 destination: './public/uploads/',filename: (req,file,cb) => {
     cb(null,file.fieldname + '-' + Date.Now())
 }
});

var upload = multer({storage: storage});

router.post('/',upload.single('image'),async (req,res,next) => {
 console.log(res);
 req.book = new Book();
 next();
},postOrEditBook('new'));

function postOrEditBook(page) {
 return async (req,res) => {
     let book = req.book;
     book.img = {
         data: fs.readFileSync(path.join( './public/uploads/' + req.file.filename)),contentType: 'image/png'
     }
     try {
         book = await book.save();
         if(page == 'new') {
             res.redirect('/list');
         } else {
             res.redirect(`/books/${book.slug}`);
         }
     } catch (e) {
         res.render(`articles/${page}`,{ book: book })
     }
 }
}

在模式中,图像的存储方式如下:

const bookSchema = new mongoose.Schema({
    img: {
        data: Buffer,contentType: String
    }
    
});

文件的输入字段:

<form action="/books" method="POST" autocomplete="off" enctype="multipart/form-data">
      <input type="file" name="image"">
</form>

进入mongodb的图像如下所示: img:对象 :二进制('iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAIAAABAXKuVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMA ...',0) contentType:“图像/ png”

而且,我试图在ejs文件显示图像,如下所示:

<div>
      <% books.forEach(book => { %>
            <img src="data:book/<%= book.img.contentType %>;base64,<%= book.img.data.toString('base64') %>">
      <% }) %>
</div>


有人可以告诉我我在做什么错吗?我真的不知道是什么问题。我找不到任何能帮助我解决这个问题的东西...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)