如何在 Node.js 中创建 Blob?

Posted

技术标签:

【中文标题】如何在 Node.js 中创建 Blob?【英文标题】:How do I create a Blob in Node.js? 【发布时间】:2019-05-07 08:06:32 【问题描述】:

我尝试在 Node.js 中创建一个 Blob。首先是这个:

var b = new Blob(['hi', 'constructing', 'a', 'blob']);

ReferenceError: Blob is not defined 失败

然后我尝试使用blob 模块(这两行代码来自此模块的示例,请参阅https://www.npmjs.com/package/blob):

var Blob = require('blob');
var b = new Blob(['hi', 'constructing', 'a', 'blob']);

TypeError: Blob is not a constructor 失败

我该怎么做?

【问题讨论】:

你安装的是什么版本的 Blob? 您指的包是针对浏览器的,而不是 Node.js 从描述中: "A cross-browser Blob that fall back to BlobBuilder在适当的时候。如果两者都不可用,它会导出undefined。" (我的重点) 你想对 blob 做什么? Node.js 使用Buffer 或类型化数组,而不是Blobs。 如果你使用 node.js,你可能想要使用 Buffer。 @Leo - 是的,我确定。有点令人困惑的是,在过去几年中,以浏览器为目标的软件包已经(成群结队地)出现在 npm 上。使用 require 的模块已经成为 Webpack、Rollup 等打包工具的一个功能,因此人们开始将 npm 用于浏览器的通用模块,就像将它用于 Node.js 的通用模块一样。事实上,一些模块被编写为在任一环境中工作。 (但blob 似乎不是其中之一。) 【参考方案1】:

Node.js has experimental Blob support now,自 v14.18 / v15.7.0 起,将 Web API 引入 Node.js 的持续努力的一部分,因此代码可以在不重写的情况下被重用。


Node.js 没有 不习惯Blob,它使用Buffer不是混淆ArrayBuffer) 和 typed arrays。

您尝试使用的 blob npm 模块不是用于 Node.js,而是用于浏览器,以消除您在不同浏览器中创建 Blobs 的历史差异。来自its description:

一个跨浏览器 Blob,在适当的时候回退到BlobBuilder。如果两者都不可用,则导出undefined

(我的重点)

有点令人困惑的是,在过去的几年里,npm 上(成群地)出现了以浏览器为目标的软件包。使用 require 的模块已经成为 Webpack、Rollup 等打包工具的一个特性,因此人们开始将 npm 用于浏览器的通用模块,就像将它用于 Node.js 的通用模块一样。事实上,一些模块被编写为在任一环境中工作。 (但blob 似乎不是其中之一。)

在 cmets 中,您曾说过要从 Node.js 进程上传文件。您不需要Blob,您在Node.js 中执行此操作的方式与您在浏览器中执行此操作的方式不同。所以你可能想研究如何从 Node.js 上传文件,而不用担心Blobs。不过,那将是一个不同的问题。 (可以回答 here 或者,如果您愿意使用 Express,here。)

【讨论】:

以上是关于如何在 Node.js 中创建 Blob?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongodb (node.js) 在集合中创建一个包含所有值的数组

如何在 node.js 中的 paypal 中创建可变的定期付款

如何在 node.js 中创建一个简单的 http 代理?

如何在 Sequelize 中创建一个表以使用 Node JS 存储在 Postgresql 中

Microsoft Azure:如何在 blob 容器中创建子目录

在 Azure Blob 容器中创建两个文件时,如何在 Azure 数据工厂中创建事件触发器?