如何将mongodb中的图像保存为BLOB?

问题描述 投票:0回答:1

我已经完成了一个个人项目,其中用户可以自己注册,并且使用 multer 将个人资料图片保存到本地磁盘,并将图像 url 路径返回给用户。一切都完美无缺。

完成这个项目后,我意识到将个人资料图片作为 BLOB 存储在 mongodb 中似乎是更好的方法,因为图像本身很小并且数据放置在一个地方,而不是磁盘上的图像文件和图像mongodb 中的 url。所以,我基本上是在尝试完成这个项目,但是,我对 buffer、blob 和 base64 等术语有点不知所措。有人可以帮助解释一下它们之间的区别以及我应该使用哪一个来将个人资料图片存储在 mongodb 中。另外,我将使用猫鼬,因为它没有“blob”模式类型,所以我假设我需要使用“buffer”模式类型。

最后,您能否向我展示如何将图像转换为 blob 或缓冲区并将其转换回来,以便将其用作 img 源。还有,我需要使用 multer 吗?

node.js mongoose blob buffer
1个回答
0
投票

我会尽量保持简短,因为网上有大量关于这些主题的材料。一开始感到不知所措是可以的,但说实话,最终理解起来既不那么困难,也不那么耗时。
Base64 是一种将数据转换为一组特殊的 1 和 0 的编码方法。缓冲区是一个指定的内存区域,用于存储二进制数据以供处理器访问和使用。 Blob(二进制大对象)是数据库中通常用于存储二进制数据的数据类型。
由于 Mongoose 没有特定的 blob 模式类型,因此您可以使用缓冲区模式类型来存储图像等二进制数据。

const mongoose = require('mongoose')

const userSchema = new mongoose.Schema({
  username: String,
  profilePicture: Buffer // Store the profile picture as a buffer
})

const User = mongoose.model('User', userSchema)

module.exports = User

要将图像转换为 Node.js 中的缓冲区,可以使用 fs 这样的模块来读取图像文件,然后将其存储为缓冲区。

const fs = require('fs');

// Read the image file and store it as a buffer
const imageBuffer = fs.readFileSync('path/to/image.jpg')

要将缓冲区转换回可以在 HTML img 标签中显示的图像源,您可以使用带有 Base64 编码的数据 URI 方案。

// Convert the buffer to a Base64-encoded data URI
const base64Image = imageBuffer.toString('base64')
const imageSrc = `data:image/jpeg;base64,${base64Image}`

// Now you can use `imageSrc` as the source in an <img> tag in your HTML

关于 Multer 的使用,将图像作为缓冲区存储在 MongoDB 中并不是绝对必要的。当您想要处理从客户端上传的文件并将它们作为单独的文件保存在服务器的本地磁盘上时,通常会使用 Multer。如果您不将图像作为文件存储在磁盘上,而是直接将它们保存为数据库中的缓冲区,则可以针对此特定用例跳过使用 Multer。但是,如果您有其他文件上传要求,Multer 仍然是一个有用的工具。

© www.soinside.com 2019 - 2024. All rights reserved.