从 Gridfs 读取 chunk 并转换为 Buffer

2024-01-06

我有一个关于缓冲区的问题。这是我的代码:

var Grid = require('gridfs-stream');
var mongodb = require('mongodb');
var gfs = Grid(db, mongodb);
var deferred = Q.defer();
var image_buf = new Buffer('buffer');
var readableStream = gfs.createReadStream(name);

readableStream.on('data',function(chunk){  
    console.log(chunk);
    image_buf = Buffer.concat([image_buf, chunk]);
    console.log(image_buf)//differ from the chunk above
});
readableStream.on('end',function(){
    db.close();
    deferred.resolve(image_buf);
})
return deferred.promise;

我正在做的是从 MongoDB 读取图像并将其放入 gridfs-stream 中。我真的想检索流中的所有块并将它们传递给另一个变量,以便我可以重用这些块在另一个 API 中绘制图像。因此我使用 image_buf 和 Buffer 来执行任务。但是,我得到了一个完全不同的缓冲区字符串。正如你在上面的代码中看到的,我安慰了我得到的 chunk 和 image_buf,但它们是完全不同的。谁能告诉我这样做的原因以及如何正确收集所有块?多谢!!!

更新:好的,所以我现在想通了:我将在下面附加我的代码,供任何遇到与我相同问题的人使用:

    readableStream.on('data',function(chunk){ 
        console.log("writing!!!");
        if (!image_buf)
            image_buf = chunk;
        else image_buf = Buffer.concat([image_buf, chunk]);
    });

问题发布者提供的更新不起作用。所以我将提供我自己的答案。而不是使用new Buffer('buffer')最好使用一个简单的数组并将块推入其中并使用Buffer.concat(bufferArray)最后获取流的缓冲区,如下所示:

var readableStream = gfs.createReadStream(name);
var bufferArray = [];
readableStream.on('data',function(chunk){  
    bufferArray.push(chunk);
});
readableStream.on('end',function(){
    var buffer = Buffer.concat(bufferArray);
    deferred.resolve(buffer);
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Gridfs 读取 chunk 并转换为 Buffer 的相关文章

随机推荐

  • 将 Hudson 作业移至另一台服务器

    我已经设置了一个持续集成构建 Hudson 在 Tomcat 上运行 我现在需要将其移动到 Tomcat 的另一个实例 但不想从头开始配置所有内容 是否有一个配置文件定义了我可以复制到新服务器的每个作业 或者可以通过用户界面导入 导出作业
  • 使用变量的“原型”

    大多数时候 主要是教程 我看到 原型 用于方法 我很确定它也可以用于变量 也许对于设置 默认值 最有用 它不经常用于函数有什么原因吗 这是不好的做法 还是存在明显的性能差异 在我的脑海中 你失去了功能hasOwnProperty http
  • Networkx read_gml 错误“networkx.exception.NetworkXError:无法在 (3, 1) 处标记 u'graph'”

    我正在尝试使用 networkx 读取 gml 文件 非常简单 对吧 除非每当我尝试读取文件时 我都会收到错误 networkx exception NetworkXError 无法标记 u graph at 3 1 我对gml或netwo
  • 转换为位图时,CardView 阴影未渲染

    问题 我尝试保存一个视图组 其中有一个CardView作为其子级之一 作为 PNG 文件 为了达成这个 我膨胀视图组并使用所需信息填充视图 通过以下方式将图像加载到图像视图Glide https github com bumptech gl
  • 在 SpriteKit 中呈现一个场景而不丢弃之前的场景?

    我的情况是我有一个GameMenuScene在用户选择级别后 我想呈现LevelScene 但我不想再有以前的了GameMenuScene被丢弃是因为LevelScene实际上是一个 property of GameMenuScene用户是
  • 为什么从 spring-data-jpa 保存返回的实体中未设置 ID

    我有一个简单的实体 我正在使用 spring data jpa 版本 1 2 0 RELEASE 和 eclipselink 2 4 1 Entity Table name platform public class Platform Id
  • 如何在symfony2中覆盖奏鸣曲管理包的CSS

    我想覆盖一个css文件 即驻留在sonata管理包项目的sonata project admin bundle Sonata AdminBundle Resources public bootstrap css路径中 请帮帮我 一种可以覆盖
  • 如果记录存在否则插入如何更新sqlite表?

    这可能是重复的问题 但我很困惑 因为我是 sql 的新手 android 正在从服务器获取响应 如果表中的值已存在 则需要将其保存在 sqlite 数据库中更新 否则插入 il 检查任务 id 这是唯一的不知道如何为了做到这一点 我已经搜索
  • Dotnet 发布未将 DLL 发布到发布目录

    我想发布我的自包含 NET Core 2 2 应用程序 但是一个特定的 NuGet 包 Microsoft Management Infrastructure 从未发布到publish文件夹 因为 dll 文件不存在 我正在使用命令dotn
  • Android 从数据库获取数据

    我有一个可以从数据库检索用户数据的页面 但经过一整天的尝试 我只能获取表列名称 但无法获取其中的值 这是我创建数据库的代码 public static final String LASTLOGIN lastuser public stati
  • 为什么 CakePHP 身份验证组件不散列我的密码?

    我在用着CakePHP http en wikipedia org wiki CakePHP1 2 具有 Auth 和 ACL 组件 在我的用户注册操作中 密码未经过哈希处理 具体来说 这个表达式 if this gt data User
  • 按下按钮时加 1

    我的代码很长 所以我只会添加相关的片段 好的 我一直在尝试使用以下代码将标签增加 1 btnComplete setOnAction new EventHandler
  • 字符串到变量名称 MATLAB

    例如 如果我有一个变量 xa 2 然后我通过连接 x 和 a 构造一个字符串 如何使这个新字符串的值为 2 xa 2 var strcat x a 这样的结果是var xa 但我想要的是var 2 谢谢 Use eval var eval
  • 种子 Python RNG 显示集合的非确定性行为

    当尝试从集合中选择伪随机元素时 我看到了非确定性行为 即使 RNG 已播种 示例代码如下所示 为什么会发生这种情况 我是否应该期望其他 Python 数据类型也显示类似的行为 注意 我只在 Python 2 7 上对此进行了测试 但它可以在
  • 在多 GPU 系统中,如何将 OpenCL 设备与给定 PCI 供应商、设备和总线 ID 的特定 GPU 相匹配?

    我希望能够在由 PCI ID 标识的多 GPU 系统上将 OpenCL 设备与系统中的 GPU 进行匹配 例如 如果我的系统具有多个 GPU 可能来自不同的供应商 我可以通过枚举 PCI 总线来列出设备 这为我提供了 PCI 供应商 设备和
  • 什么是 CMAKE_BUILD_TYPE:调试、发布、RelWithDebInfo 和 MinSizeRel?

    来自文档页面 https cmake org cmake help latest variable CMAKE BUILD TYPE html CMAKE BUILD TYPE 指定单配置生成器的构建类型 这静态指定将在此构建树中构建什么构
  • 使用 UrlRewriter.NET 的外部配置文件

    我正在使用网址重写器 NET http urlrewriter net为我的 asp net 网站实现 url 重写的库 目前正在从以下位置读取重写规则web config像这样的文件
  • 想要用java查找两个文本文件的内容差异

    我有两个文本文件 a txt b txt 每个文本文件都包含一些文件路径 b txt包含的文件路径多于a txt 我想确定添加哪些路径以及从中删除哪些路径a txt以便它对应于路径b txt 例如 abc txt 包含 E Users Do
  • 在 OS X Yosemite 上安装 Compass

    我正在尝试使用 GEM 安装指南针 但出现很多错误 我的 MacBook Pro 运行的是 OS X Yosemite 有人有同样的问题吗 感谢您的时间 祝你今天过得愉快 sudo gem install compass Password
  • 从 Gridfs 读取 chunk 并转换为 Buffer

    我有一个关于缓冲区的问题 这是我的代码 var Grid require gridfs stream var mongodb require mongodb var gfs Grid db mongodb var deferred Q de