将图像存储在 Mongodb 中并使用 Nodejs 提供服务

2024-05-06

我知道 Mongodb 可以通过两种方式存储图像。

  1. 通过将图像存储为二进制在常规文档中
  2. 通过 Gridfs 管理更大的图像。

为简单起见,并且因为我计划服务器的图像很小,所以我将选择选项 1。

为了将图像提供给浏览器,我使用的是nodejs。

我的问题是这会有多困难?如何将二进制数据转换为浏览器可以理解的实际图像?涉及什么类型的编码?

您能给我指出网络上其他地方的教程/示例吗?

顺便说一句,我知道出于性能原因这可能不是一个好主意,我计划在服务后缓存图像。我只是想完全避免使用文件系统。


我强烈建议不要从 MongoDB 提供图像。

最好将它们存储在静态文件存储 (S3) 上,并可能将路径保留在 MongoDB 中。


您可能会使用 base64 编码将文件放入 mongodb 中:http://www.greywyvern.com/code/php/binary2base64/ http://www.greywyvern.com/code/php/binary2base64/(或者只是 base64 shell 实用程序)。

如果您只使用常规文档,那么性能成本相对较低(只要缓存良好)。如果您使用的是包含 GridFS 和常规文档的混合数据库,那么您的服务器上将需要大量 RAM——GridFS 查询的运行方式将与文档查询完全不同。

转换图像可能会像这样工作:

var base64Data = imagefile.replace(/^data:image\/png;base64,/,""),
var dataBuffer = new Buffer(base64Data, 'base64');

// below line won't actually work but it's something along the lines of what you want:

db.foo.insert({magic: 123, etc... img: dataBuffer.toString()})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图像存储在 Mongodb 中并使用 Nodejs 提供服务 的相关文章

  • 使用 puppeteer 配置 PDF 页面宽度

    我正在尝试使用 puppeteer 生成 pdf 但生成的 pdf 宽度很大 我想要一个 pdf 文件 它在一页中显示所有内容 并且宽度必须为 4 8 厘米 其中页面高度可以是其内容的任何长度 我在pdf中添加了配置 path filePa
  • 使用 Opera 在 JavaScript 中更新图像源

    我定期使用 Image 对象加载远程图像 以便稍后在画布上绘制 Image 对象仅在 JS 中创建 它不存在于 DOM 中 该代码在 Chrome 和 Firefox 上运行良好 在 Opera 中 问题在于 每当修改图像源时 浏览器似乎总
  • 如何在NodeJs中应用Java/Spring的分层架构?

    我已经尝试学习 NodeJS 有一段时间了 所有书籍和教程似乎都遵循类似的代码结构模式 例子 const express require express const app express app set view engine hbs a
  • socket.io - ReferenceError:套接字未定义

    我正在尝试编写一个简单的应用程序 它将我在文本区域中输入的每个字符镜像到 div 使用socket io 但我不断收到以下客户端错误 ReferenceError 套接字未定义 这是我的服务器代码 var express require e
  • MongoDB req.body 问题

    我有一个非常简单的 Mongo 设置 如下所示 这非常适合从输入字段获取数据并保存数据 一切都在工作 我的问题 我将如何循环遍历前端的 jobs 变量并设置数据 以便它适用于我的模型 不知何故 我需要将其输入到输入中 以便我可以 req b
  • 如何模拟 typeORM 的 getCustomRepository

    我想对一个在其构造函数中使用 getCustomRepository 的类进行单元测试 但我只是想不出一种简单的方法来模拟它 这是我的班级代码 import getCustomRepository from typeorm export c
  • mongodb/node.js 中单文档并发读写操作的问题

    编辑 6 15我尝试运行相同的代码 在调用之前添加延迟 doSafePush 再次收到 ConcurrencyDBError 时 即执行return when resolve wait delay 35 then function doSa
  • 使用 puppeteer 部署 firebase 功能时说即使我启用了 --no-sandbox 也找不到 chrome

    我正在尝试将 firebase 函数部署到使用 puppeteer 的 firebase 项目 我让它在本地计算机上运行 但是当它尝试在 firebase 上运行时 我收到此错误 Exception from a finished func
  • 了解节点插件 API (N-API) HandleScope

    我很难理解如何正确使用手柄范围 https github com nodejs node addon api blob master doc handle scope md and EscapeHandleScope https githu
  • 使用express/connect-redis在页面重新加载时抓取现有会话

    使用 connect express 和 socket io 我试图让我的应用程序在重新连接时获取会话详细信息 我的会话显然在客户端连接时工作 但如果我刷新浏览器上的页面 它会忘记所有内容 我的会话cookie肯定是一样的 所以不是那样的
  • 如何在 MongoDB 中获取连接的客户端

    我正在编写一个使用 mongo 作为数据库的应用程序 我想打印连接到数据库的客户端 例如打印他们的ip 我怎样才能得到这些信息 我尝试使用 db serverStatus connections 但它给了我可以访问我的数据库的计算机数量 您
  • 如何在 Mongoose 中定义排序函数

    我正在开发一个小型 NodeJS Web 应用程序 使用 Mongoose 访问我的 MongoDB 数据库 我的收藏的简化架构如下 var MySchema mongoose Schema content type String loca
  • Stripe 创建使用记录错误 - 时间戳必须早于订阅的当前周期结束时间 - Date.now()?

    我正在尝试为按计量计划的客户创建条带使用记录 当我在请求中使用时间戳 Date now 时 我收到的错误是 无法使用此时间戳创建使用记录 因为时间戳必须早于订阅的当前周期结束时间 这似乎是不言自明的 但考虑到订阅的当前周期结束时间还剩 14
  • 如何找出NPX运行的是哪个文件?

    当你跑步的时候 说 npx webpack在终端中 NPX 找到一个webpack打包某处并运行它 如何确定NXP运行的二进制文件的确切位置 我正在寻找类似的工具which https en wikipedia org wiki Which
  • JFrame 图标在 Ubuntu 12.04 中不显示

    我使用一些图像图标开发了一个 Swing 应用程序 应用程序 jar 文件在 Windows 中按预期工作 但相同的 jar 文件在 Ubuntu 12 04 操作系统上不显示框架的图像图标 我的示例代码 ImageIcon ImageIc
  • Node.js - 将数据缓冲到 Ffmpeg

    我使用 Node js 和 Ffmpeg 来创建动画 因为我试图避免第三方 avi mp4 解析器 所以我决定将动画输出为原始 rgb24 数据文件 然后使用一些程序将其转换为 mp4 文件 我发现 Ffmpeg 是免费且开源的 它完全可以
  • mongodb C# 异常无法从 BsonType Int32 反序列化字符串

    我是在 C 中使用 mongo db 的新手 但我正在尝试在 mongo db 中导入大型数据库 MyDb 由仅具有简单参数 Id Body Title Tags 的实体组成 这是 mongo 中实体的示例 Id someff asdsa
  • AWS DynamoDb DocumentClient - 从项目数组创建批量写入 - node.js

    我正在尝试执行batchWrite使用 DynamoDB 的操作DocumentClient来自项目数组 JSON 这是我的代码 var items for i 0 i lt orders length i var ord orders i
  • Node Js - 识别请求是来自移动设备还是非移动设备

    我对 Node js 还是个新手 是否有任何解决方法或方法如何使用 Node js 识别来自客户端的请求是来自移动设备还是非移动设备 因为我现在正在做的是我想根据设备类型 移动 桌面 限制对某些 API 的访问 我在服务器端使用restif
  • Webworker-threads:在工作线程中使用“require”可以吗?

    使用 Sails js 我正在测试 webworker threads https www npmjs com package webworker threads https www npmjs com package webworker

随机推荐

  • Outlook Interop C# 排序项目不起作用

    我偶然发现了一个问题 即 Outlook 项目表排序方法没有给出所需的结果 尽管方法 GetLast 始终返回相同的电子邮件项目 无论是升序还是降序 代码如下 Application olApp new Application NameSp
  • 如何从JSP中获取java类的对象

    我有一个结果jsp页面 它打印java类的字符串变量 有人能给我任何想法吗 我使用简单的 httpServlet 作为操作类 Class A String name public void setName this name callMet
  • 如何在机器人框架中使用“Run Keyword If”

    我刚刚开始研究机器人框架 我正在尝试使用Try Keyword If关键字 但我在网上看到的所有示例都在一行中显示了解决方案 而我在 RIDE 中有列和行 如果当前页面上有一个 ID 为 当前状态 的按钮 那么我想访问 URL www xy
  • React Router V5 在路由中使用上下文变量的最佳方式

    在我的应用程序中 我定义了路线 如下所示
  • lxml etree xmlparser 删除不需要的命名空间

    我有一个 xml 文档 我正在尝试使用 Etree lxml 解析它
  • 为什么持有引用的类可以复制?

    如果有一个类持有引用 我希望以下代码会惨败 但它可以编译 include
  • 停止所有 JavaScript 执行

    是否有一个相当于 php die 函数的 javascript 可以停止所有 javascript 包括将来的 ajax 请求回调 超时等 运行 注意 我无法在调试器中使用断点 因为 bug 存在于 ie8 中 并且调试器会阻止您在断点处向
  • Java Stream - 当键出现在列表中时进行分组

    我正在尝试按对象中显示为列表的值对集合进行分组 这是我的模型 public class Student String stud id String stud name List
  • 获取 gridview (Asp.net) c# 中选定复选框的 id

    我有两列 一列用于 id 另一列用于复选框 我在 gridview 中勾选了复选框 我想查看 gridview 中选中的值 如果选中复选框 那么我想要这些值 即 id ASP net foreach Gridviewrow gvr in G
  • Angular Template:如何绑定 RXJS Observable 并读取其属性?

    我创建了这个界面 interface IGame name string description string 我将它用作 Observable 并将其传递为Input to the Component Input public game
  • pandas 中的分箱和转换

    我有下面的数据框 A B 1 1 4 1 5 1 6 2 8 3 15 4 我想将数据框分箱并转换为下面的数据框 range A sum B 0 4 2 5 9 6 10 14 0 15 19 4 I tried groupby Group
  • 套接字发送并发保证

    如果我在两个进程 或两个线程 之间共享一个套接字 并且在这两个进程中我尝试发送一条阻塞的大消息 大于下划线协议缓冲区 是否可以保证这两个消息将按顺序发送 或者消息可以在内核内部交错吗 我主要对 TCP over IP 行为感兴趣 但了解它是
  • php中UCS2/HexEncoded字符转UTF8

    我之前问过一个问题 从 UTF 8 获取 UCS 2 HexEncoded 字符串 我在以下链接中得到了一些人的帮助 UCS2 HexEncoded 字符 https stackoverflow com questions 1872773
  • Perl 字符串替换:匹配但不替换正则表达式的一部分

    假设我在 Perl 中有一个字符串 我正在尝试匹配并替换为以下内容 string s a zA Z find a zA Z replace g 如图所示 我想替换两侧被非字母字符包围的所有内容 但是 当我替换字符串时 我不想也替换这些字符
  • 如何使用 vue-toastification

    我刚刚将在 vue 3 中创建的项目迁移到 nuxt 3 以前我使用了 vue toastification 模块 但现在我不知道如何正确导入它 我的代码使用这个模块 import useToast POSITION from vue to
  • 在heroku上部署代码时出错

    我在 git hub 中有一个java脚本代码 上个月我在heroku上部署了很多次 没有出现任何问题 今天 当我想在heroku上部署完全相同的代码时 出现以下错误 The requested API endpoint was not f
  • 将字节字符串转换为 Base64 编码的字符串(输出不是字节字符串)

    我想知道是否可以将从读取文件中获得的字节字符串转换为字符串 所以type output str 到目前为止我在谷歌上找到的都是这样的答案如何对 PNG 图像进行 Base 64 编码以便在 CSS 文件的 data uri 中使用 http
  • SQLAlchemy ORM 类/对象的自省

    我正在寻找一种方法来内省 SQLAlchemy ORM 类 实体 以确定实体属性的类型和其他约束 如最大长度 例如 如果我有一个声明性类 class User Base tablename USER TABLE id sa Column s
  • Android Studio 中的 Gradle 问题

    我必须重新安装 Android Studio 现在当我尝试构建我的项目时 出现此错误 org gradle tooling GradleConnectionException Could not create an instance of
  • 将图像存储在 Mongodb 中并使用 Nodejs 提供服务

    我知道 Mongodb 可以通过两种方式存储图像 通过将图像存储为二进制在常规文档中 通过 Gridfs 管理更大的图像 为简单起见 并且因为我计划服务器的图像很小 所以我将选择选项 1 为了将图像提供给浏览器 我使用的是nodejs 我的