Nodejs:如何向浏览器发送可读流

2024-04-08

如果我查询框 REST API 并返回可读流,处理它的最佳方法是什么?怎么发送到浏览器呢? (免责声明:我对流和缓冲区很陌生,所以其中一些代码非常理论化)

你能在响应中传递readStream并让浏览器处理它吗?或者您是否必须将块流式传输到缓冲区然后发送缓冲区?

export function getFileStream(req, res) {
  const fileId = req.params.fileId;
  console.log('fileId', fileId);
  req.sdk.files.getReadStream(fileId, null, (err, stream) => {
    if (err) {
      console.log('error', err);
      return res.status(500).send(err);
    }
    res.type('application/octet-stream');
    console.log('stream', stream);
    return res.status(200).send(stream);
  });
}

会 ^^ 工作,或者你需要做类似的事情:

export function downloadFile(req, res) {
  const fileId = req.params.fileId;
  console.log('fileId', fileId);
  req.sdk.files.getReadStream(fileId, null, (err, stream) => {
    if (err) {
      console.log('error', err);
      return res.status(500).send(err);
    }
    const buffers = [];
    const document = new Buffer();
    console.log('stream', stream);
    stream.on('data', (chunk) => {
      buffers.push(buffer);
    })
    .on('end', function(){
      const finalBuffer = Buffer.concat(buffers);
      return res.status(200).send(finalBuffer);
    });
  });
}

如果您将理论行更改为:

- return res.status(200).send(stream);
+ res.writeHead(200, {header: here})
+ stream.pipe(res);

这就是节点流最好的事情。另一种情况(本质上)也可以工作,但它会积累大量不必要的内存。

如果您想查看一个有效的示例,这是我基于 scramjet、express 和 browserify 编写的示例:

https://github.com/MichalCz/scramjet/blob/master/samples/browser/browser.js https://github.com/MichalCz/scramjet/blob/master/samples/browser/browser.js

您的流从服务器到浏览器的路径。通过一些小的修改,它就能解决你的问题。

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

Nodejs:如何向浏览器发送可读流 的相关文章

  • 不能需要本地 CoffeeScript 模块

    我正在运行 Node js 0 10 21 我尝试了 CoffeeScript 1 6 3 并掌握了有和没有的情况require coffee script extensions 当然 将这两个文件编译为 JavaScript 并直接在 N
  • 在 NodeJS 中处理长时间运行的进程?

    我看过一些较旧的帖子涉及这个主题 但我想知道当前的现代方法是什么 用例是 1 假设您想要在视频文件上执行长时间运行的任务 例如 60 秒长 例如jspm install这最多可能需要 60 秒 2 不能对任务进行细分 其他要求包括 需要知道
  • 有没有办法像我们在bunyan CLI 中显示的那样显示winston 日志文件?

    In Bunyan https github com trentm node bunyanlogger 我们可以看到这样的日志文件 tail f sample log bunyan并以彩色显示日志并漂亮地显示 json 对象 但我找不到类似
  • 使用 array.map 后如何运行函数?

    我想做的是在使用 array map 之后运行一个函数 理论上 我应该能够在 array map 之后运行 但是 由于某种原因 它在 array map 完成之前运行该函数 我该如何解决 这是我的代码 var channelIds chan
  • 使用 Express/Node 和 MongoDB 响应 POST 请求

    我正在编写一个程序 该程序使用 React 作为前端 并使用 Express Node API 作为后端 然后在 MongoDB 数据库中执行 CRUD 操作 现在 我正在使用本机 JS fetch API 在前端执行 GET POST 操
  • 如何检查 Node.js 中是否设置了环境变量?

    我想检查我的环境变量是否设置快递JS https www npmjs com package express服务器并根据是否设置执行不同的操作 我试过这个 if process env MYKEY undefined console log
  • WebSocket 连接失败:WebSocket 握手期间出错:意外的响应代码:400

    我正在尝试将 Socket io 与 Angular 集成 但在从客户端到服务器建立连接时遇到困难 我查看了其他相关问题 但我的问题发生在本地 所以中间没有网络服务器 这就是我的服务器代码的样子 const app express cons
  • 更新插入不适用于 updateOnebulkWrite v3.4

    我正在尝试批量写入一些更新 除了更新插入之外的所有内容都正常 我的代码完美地更新了所有项目 并且没有给出任何错误 这里的问题是批量插入updateOne没有更新插入 这是我的代码的未经测试和缩短的示例 因此您可能会发现一些语法错误 希望您明
  • 如何在nodejs中获取字符串长度(以字节为单位)?

    如何在nodejs中获取字符串长度 以字节为单位 如果我有一个字符串 像这样 那么 str length 将返回 4 但是如何获得该字符串 有多少字节组成 这是一个例子 str console log str str length char
  • 为什么Intellij IDEA在nodejs中显示require undefined?

    有谁知道为什么intellij IDEA强调需要 我怎样才能解决这个问题 我在 Windows 上使用 IntelliJ IDEA 15 0 3 也遇到了同样的问题 解决方案是 文件 gt 设置 gt 语言和框架 gt Nodejs 和 N
  • RoboMongo:不显示所有文档

    当我打开集合时 它仅显示前 50 个文档 而不是全部文档 如何使 RoboMongo 显示集合中的所有文档 最好是自动 罗博蒙戈结果 https i stack imgur com K5fn8 png 2019 年 12 月 6 日更新 最
  • 从 Puppeteer 中的 page.evaluate 获取元素? [复制]

    这个问题在这里已经有答案了 我正在与Node js and 傀儡师第一次 找不到输出值的方法page evaluate到外部范围 我的算法 Login Open URL Get ul 循环每个li然后点击它 等待innetHTML要设置并添
  • 如何从 docker 容器运行 webpack 构建?

    我正在制作的应用程序是用 ES6 编写的 其他好东西是由 Docker 容器内的 webpack 转译的 目前 一切工作从创建内部目录 安装依赖项到创建编译的捆绑文件 当运行容器时 它说 dist bundle js 不存在 除非我在主机目
  • Nodejs Base64 中的读取文件

    我正在尝试从客户端读取以 base64 编码的图像 如何使用nodejs进行阅读 My code add to buffer base64 image var encondedImage new Buffer image name base
  • 枚举nodejs中的系统驱动器

    有没有办法检索计算机上所有逻辑驱动器的驱动器名称 我查看了 fs api 但从那里我只能枚举给定目录的文件和目录 我不确定 驱动器名称 是什么意思 如果您的意思是以下形式的驱动器 PhysicalDriveN 我遇到了同样的问题并实现了这个
  • 如何在 NodeJS 中使用 PhantomJS 模拟鼠标悬停或在页面上运行 JS 功能

    NodeJS PhantomJS 使用 Cheerio 进行内容解析 需要解析包含动态加载的div 提示 的网页 该事件可以在许多表 td 上 这是一个示例 当我将鼠标悬停在特定的 td 上时 我看到这个带有数据的橙色块 它动态加载了函数
  • 使用 NodeJS 从 GCP 存储下载对象

    我在用着 google cloud 存储 https www npmjs com package google cloud storage从节点应用程序访问 Google Cloud Storage 存储桶内的对象 但我无法使其工作 我已在
  • 使用sequelize 根据express.js 中的路由更改数据库连接

    是否可以更改数据库连接sequelize取决于路线 例如 用户可以访问网站中的 2 个不同安装 example com foo example com bar 登录后用户将被重定向到example com foo为了获得他们的所有任务foo
  • NodeJS 内存增长 - (系统)内存泄漏?

    我在我们的生活环境中遇到了奇怪的内存泄漏 其中 system 堆中的对象不断增长 堆转储 Here is a memory dump where the memory usage grew to 800MB 请注意 该内存保留在Genera
  • 运行 npm install 时出错 Error: 404 Not Found: 7zip-bin@~4.1.0

    当我运行 npm install 时 我看到此错误 3 verbose stack Error 404 Not Found 7zip bin 4 1 0 2293 verbose stack at fetch then res C cygw

随机推荐

  • Fable F# > js 编译多个.fsx 文件

    如何编译多个 fsx使用寓言的文件 我 天真地 尝试在 fable config 文件中传递它们的数组 如下所示 outDir app projFile app index fsx app testmod fsx sourceMaps tr
  • 无法建立连接 - 源不存在

    我有一个简单的部分 用户可以根据需要从一个元素连接到另一个元素 连接后可以这样 我使用 jsPlumb 进行连接 连接后 如果用户满意可以保存 一切都按照我的要求正确保存 现在当用户重新加载页面连接时 例如 con 6 con 18 不会显
  • 如何改变平滑滚动的速度? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我无法更改平滑滚动的速度 我已经尝试更改以下代码末尾的值 1000 您能帮我吗 document ready funct
  • 从 Airflow Postgres 挂钩检索完整连接 URI

    有没有更简洁的方法从 Postgres 挂钩获取完整的 URI get uri 不包含 额外 参数 所以我像这样附加它们 def pg conn id to uri postgres conn id hook PostgresHook po
  • Flink Logging 获取作业名称或作业 ID

    我正在尝试设置 logback xml 以便它将包含与日志记录关联的 JobName 或 JobId 我还没有找到一种方法来做到这一点 是否可以 最终我想要实现的是能够将日志发送到 ElasticSearch 并用消息标记 JobName
  • 在开发模式下生成 JasperReport 时出错

    我在启动时初始化程序中的报告时遇到问题 前段时间 它工作正常 但是当我将 JDK 1 7 update 17 卸载到 JDK 1 7 update 21 并全新安装 Netbeans 时 存在异常 这是错误消息 Exception in t
  • iOS 应用程序可以在运行时读取自己的权利吗?

    iOS 应用程序可以在运行时发现 检查或以其他方式读取自己的权利吗 理想情况下 我可以将 entitlements 文件的全部 已处理 内容作为 plist 读取 仅获取应用程序标识符前缀将是可接受的次优方案 这里的目标包括 允许使用各种应
  • 创建没有 UI 的 iOS 操作扩展

    我正在尝试创建一个类似于 iOS 中可用的系统 复制 操作的操作扩展 我发现不同的答案说不可能有非全屏用户界面 但根据苹果官方文档 https developer apple com library archive documentatio
  • 树中始终向左|向右的下降路径的最大长度

    我正在准备技术面试 所以基本上从一开始就学习算法 我们得到了 BST 我需要找到其中 desc 路径的最大长度 该路径总是向左或向右 换句话说 示例树的下降路径是2 即15 10 6 5 2 15 10 6 14 我对算法问题非常陌生 解决
  • Predict() glmnet 函数中的错误:尚未实现的方法

    当我使用预测 glmnet 函数时 我收到代码下面提到的错误 mydata lt read csv data csv x lt mydata 1 4 y lt mydata 5 data lt cbind x y model lt mode
  • 如何在Flutter中创建45度的线性渐变?

    我无法理解如何以度数 LinearGradient 进行操作 我有以下代码 Container height 100 0 decoration BoxDecoration borderRadius BorderRadius circular
  • PowerShell 支持常量吗?

    我想在 PowerShell 中声明一些整数常量 有什么好的办法吗 Use Set Variable test Option Constant Value 100 or Set Variable test Option ReadOnly V
  • Visual Studio Code (vscode) - 按键时请求文本文档/文档链接失败错误

    您好 我正在我的 Mac 和 Windows 10 计算机上运行 VSCode 在最新的更新 回滚后 它们都开始显示相同的症状 每按几次按键 就会出现输出框 并在下拉列表中选择 HTML 语言服务器 显示的错误是 Error 13 47 0
  • scala 中 `=> String` 的类型是什么?

    在scala中 有一些按名称调用的参数 def hello who gt String println hello who 参数的类型是什么who 它将 scala REPL 上的函数显示为 hello who gt String Unit
  • 增加 R heatmap() 函数中的行高

    我有一个包含数百行和数十列的矩阵 希望绘制热图 如果我使用本机 R 函数 heatmap matrix sample 1 10000 nrow 1000 ncol 10 我得到一个行标题难以辨认的数字 我假设生成的图像符合当前绘图设备的规格
  • 获取手机方向,但将屏幕方向固定为纵向

    我想要获得手机方向 但将屏幕方向保持为纵向 因此 无论用户将手机转向横向还是纵向 视图都保持不变 但我可以知道它是转向横向还是纵向 将活动设置为android screenOrientation 肖像 将解决这两个问题 但我无法通过以下方式
  • PHP 检测无用文件或无用代码的工具

    我有一个非常大的 PHP 项目 我认为有很多无用的东西 您是否有一些技巧或工具来检测无用的代码部分或无用的文件 PHP 混乱检测器 PHPMD https phpmd org 可能的错误 次优代码 表达式过于复杂 未使用的参数 方法 属性
  • 无法从源代码构建 qtermwidget

    我正在尝试建立qterm小部件 https github com lxqt qtermwidget来自源头 但它给了我错误 我已经成功构建了lxqt 构建工具 https github com lxqt lxqt build tools 然
  • 如何编辑 Angular CLI 项目的 Service Worker 文件

    我已经添加了 angular pwa使用以下命令打包到我的 Angular CLI 项目ng add angular pwa project project name 所以它变成了一个渐进式 Web 应用程序 这增加了我认识的服务人员 我想
  • Nodejs:如何向浏览器发送可读流

    如果我查询框 REST API 并返回可读流 处理它的最佳方法是什么 怎么发送到浏览器呢 免责声明 我对流和缓冲区很陌生 所以其中一些代码非常理论化 你能在响应中传递readStream并让浏览器处理它吗 或者您是否必须将块流式传输到缓冲区