Node.js 显示来自 Mongo GridFS 的图像

2023-12-09

我有一个使用 Mongo 和 GridFS 来存储图像的 Nodejs 应用程序。我正在尝试通过 Node.js (使用 Express 框架)将这些图像显示到浏览器。

我目前正在使用:

            res.writeHead(200, {'Content-Type': 'image/jpeg' });
            res.end(imageStore.currentChunk.data.buffer, 'binary');

imageStore 是创建新的 GridStore 并调用 gridStore.open(...) 后的 gridStore 对象

       var gridStore = new GridStore(self.collection.db, doc._id, doc.filename, 'r', {
            chunk_size: doc.chunkSize
        });
        gridStore.open(callback);

我确信这不是正确的方法,它会显示损坏的图像。有什么建议么?

Thanks!

Edit:

更新到 mongodb 本机 1.0.2 后,我尝试使用以下方式流式传输数据:

res.contentType("image/jpeg");
var imageStream = imageStore.stream(true);
imageStream.pipe(res);

imageStore是使用后的对象gridStore.open(function(err, imageStore){ })


确保您使用的是 1.0.1 驱动程序并使用 http 请求的管道来流式传输数据,下面的示例将对文件执行此操作。在 1.1 中,它会变得更好,因为 gridstore 对象将是一个读/写流兼容对象:)

/**
 * A simple example showing how to pipe a file stream through from gridfs to a file
 *
 * @_class gridstore
 * @_function stream
 * @ignore
 */
exports.shouldCorrectlyPipeAGridFsToAfile = function(test) {
  var db = new Db('integration_tests', new Server("127.0.0.1", 27017, 
   {auto_reconnect: false, poolSize: 1, ssl:useSSL}), {native_parser: native_parser});

  // Establish connection to db  
  db.open(function(err, db) {
    // Open a file for writing
    var gridStoreWrite = new GridStore(db, "test_gs_read_stream_pipe", "w", {chunkSize:1024});
    gridStoreWrite.writeFile("./test/gridstore/test_gs_weird_bug.png", function(err, result) {      
      // Open the gridStore for reading and pipe to a file
      var gridStore = new GridStore(db, "test_gs_read_stream_pipe", "r");
      gridStore.open(function(err, gridStore) {
        // Grab the read stream
        var stream = gridStore.stream(true);
        // When the stream is finished close the database
        stream.on("end", function(err) {          
          // Read the original content
          var originalData = fs.readFileSync("./test/gridstore/test_gs_weird_bug.png");
          // Ensure we are doing writing before attempting to open the file
          fs.readFile("./test_gs_weird_bug_streamed.tmp", function(err, streamedData) {
            // Compare the data
            test.deepEqual(originalData, streamedData);

            // Close the database
            db.close();
            test.done();          
          });
        })

        // Create a file write stream
        var fileStream = fs.createWriteStream("./test_gs_weird_bug_streamed.tmp");
        // Pipe out the data
        stream.pipe(fileStream);
      })
    })
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 显示来自 Mongo GridFS 的图像 的相关文章

  • 如何使用 pollingThrottle 和 pollingInterval?

    所以我的应用程序中有一些东西我不需要立即反应并找到有关属性的信息轮询节流阀 and 轮询间隔在文档中 所以这里基本上是我设法找到的有关这些属性的所有信息 pollingIntervalMs 数 仅限服务器 在服务器上观察时轮询此查询的频率
  • 如何使用PNGJS库从rgb矩阵创建png?

    我无法从此处的文档创建 PNG 文件 编码 https github com niegowski node pngjs https github com niegowski node pngjs 该文档提供了有关操作现有 PNG 的示例 为
  • socket.io 切换命名空间

    我目前正在与 socket io 进行简单的聊天 基础知识已经可以工作 但现在我正在尝试实现 2 个不同的命名空间 我希望客户端能够通过单击按钮从一个命名空间 支持聊天 切换到另一个命名空间 朋友聊天 服务器端 default namesp
  • 如何使用 AWS S3 SDK 的 createPresignedPost 方法使 AWS S3 文件可供公开访问?

    我有一个用例将 AWS S3 存储桶保留为默认私有 但是 上传到 AWS S3 时将某些对象公开 我使用以下代码对 AWS S3 url 进行签名 并使用 ACL 设置作为public read module exports generat
  • 将 mongoid 会话设置为只读

    我有不同的会话mongoid yml 其中一个会话提供来自静态 mongo 数据库的数据 我想知道是否有可能以只读模式 加载 会话 以便不进行任何更改save create destroy or destroy all可以制作 我的mong
  • cookie 未在跨域上设置 - AngularJS 和 NodeJS/Express

    跨域请求时未设置 cookie 我的服务器在 localhost 8000 中运行 客户端在 localhost 9000 中运行 服务器nodejs express上的cors设置是 app use function req res ne
  • NESTJS AWS Lambda 和 Sequelize 连接池

    由于我已经给出了下面代码片段中提到的池参数 因此是否有必要在每次 lambda 调用后关闭连接 这个 aws lambda 函数应该每分钟触发一次 池参数仅足以关闭连接吗 export const databaseProviders pro
  • SetCookie 标头未存储

    我目前正在制作一个 Web 应用程序 其中 API 为 Node express js 前端为 Vue js 对于身份验证 我设置了 JWT 并通过 cookie HttpOnly 发送值 SetCookie 位于 Chrome Firef
  • mongodb对话系统

    我正在实施一个verymongodb 上的简单对话系统 这个想法应该是 当我打开一个 convo 时 它应该显示发送和接收的消息 到目前为止一切正常 并且应该非常容易 通过使用像这样的伪代码这样的简单查询 from my id AND to
  • 在本地主机上设置 (https) SSL 以进行流星开发

    如何创建自签名 SSL 证书以在 mac 10 9 上的本地服务器上使用 我需要我的本地主机作为https localhost 我正在使用 linkedin API 这里解释了需要本地主机上的 ssl 的功能 https developer
  • mongoose node.js,使用 $lt 和 $gt 进行查询不起作用

    我想要获取最后分数在 15 到 20 之间的所有学生 为此 我使用 mongoose 在 mongoDB 中执行以下查询 模型工作正常 所有其他查询都正常 Pupils find marks 1 value lt 20 marks 1 va
  • Gitlab CI/CD 管道给出 Dockerfile 错误

    晚上好 我正在尝试将我的nodeJS应用程序部署到我的Digital Ocean Server 它说找不到我的Dockerfile 我确实检查过 Dockerfile 没有 txt 扩展名 任何指导表示赞赏 我在 Gitlab 项目中设置了
  • webpack用css/scss文件生成js文件

    描述 在我使用的 webpack 中迷你 CSS 提取插件 plugins new MiniCssExtractPlugin filename name hash css chunkFilename name hash css 加载 scs
  • Yii2 DropDownList Onchange 更改自动完成小部件“源”属性?

    我已经尝试过这个 yii2 依赖的自动完成小部件 https stackoverflow com questions 27025791 yii2 dependent autocomplete widget 但我不知道为什么它不起作用 这是我
  • 每次页面重新加载时都会出现新的 Google 登录库提示

    在我的项目中 我使用常规弹出客户端 JS 身份验证 平台客户端 https developers google com identity sign in web sign in 我从旧版 Google Sign 迁移到新版 Google I
  • Angular 8 webpack-bundle-analyzer 寻找错误的polyfill 文件

    无论我做什么 构建项目后我都会收到以下错误 Error parsing bundle asset
  • 如何在 ionic 应用程序中使用 socket.io

    我正在使用 ionic 创建一个应用程序cordova and angular 我必须使用 IP 地址和端口号发出请求 到插座 我读过有关 socket io 的内容 我对如何安装感到困惑套接字 io以及如何与 Angular JS 和 N
  • 错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379

    我试图允许我的nodeJs docker 映像与我的redis docker 映像 Mac OS X 环境 之间进行通信 NodeJs Dockerfile FROM node 4 7 0 slim EXPOSE 8100 COPY nod
  • 如何在nodejs中处理大量对象

    我想处理长度约为 100 000 的数组 而不会给 CPU 带来太多负载 我研究了流并偶然发现了 highlandjs 但我无法使其工作 我也尝试过使用 Promise 和分块处理 但它仍然给 CPU 带来很大的负载 如果需要 程序可能会很
  • 如何删除 node_modules - Windows 中的深层嵌套文件夹

    尝试删除后节点模块创建的目录npm install 源文件名大于文件支持的名称 系统 尝试移动到路径名称较短的位置 或者尝试 在尝试此操作之前重命名为较短的名称 I also tried shift delete and still hav

随机推荐