You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用Streams API加密Azure Blob时报ReadableStream未定义错误

问题解决办法

报错原因

ReadableStream is not defined 报错是因为 Node.js 16及更早版本没有全局暴露WHATWG标准的ReadableStream接口,你参考的教程大概率是浏览器端代码或者高版本Node环境的示例,和你当前运行环境不匹配。
而且你现有代码已经把Blob内容全量读取成了字符串,完全不需要额外构造ReadableStream,属于冗余逻辑,直接删除这段代码就能解决问题。

最简修复方案

删除构造ReadableStream的冗余代码,直接把已经读取到的blobData传给openpgp即可,修改后对应代码段如下:

// 原有读取逻辑不变
let blobData = await streamToString(downloadBlockBlobResponse.readableStreamBody)
// 删除原来构造ReadableStream的代码,直接传字符串
const encrypted = await openpgp.encrypt({
    message: await openpgp.createMessage({ text: blobData }), // 直接传入读取到的字符串
    publicKeys: publicKey,
    privateKeys: privateKey
});

大文件优化方案(可选,避免全量加载内存)

如果你要加密的Blob体积较大,全量读入内存会占用过高资源,可改用流处理方式,操作如下:

  1. 升级Node.js版本到18.x及以上,18开始默认全局支持WHATWG ReadableStream,或者在代码顶部手动导入:
// Node 16/17 使用该导入需要开启--experimental-webstreams启动flag
const { ReadableStream } = require('stream/web');
  1. 调整代码逻辑,不把Blob全量转成字符串,直接流转流加密上传即可,节省内存。

额外注意点

你代码中await containerEncryptedFiles.createIfNotExists("encrypted-dide") 属于参数错误,createIfNotExists方法不需要传入容器名称,你调用getContainerClient的时候已经指定了容器名,多余参数会被识别为公共访问层级配置,建议删除参数改为await containerEncryptedFiles.createIfNotExists()。

内容的提问来源于stack exchange,提问作者A B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 03:51:03