在 Node.js 里使用 multiparty 上传文件

时间:2023-02-08 15:16:21

需求

将上传的文件直接保存到 Google Cloud Storage 中。

解决方法:我们需要使用 part stream 订阅标准流事件,例如 data 和 end 以接收文件数据。

示例代码如下:

part.on("data", chunk => {
    writeStream.write(chunk);
});

part.on("end", chunk => {
    writeStream.end(chunk);
});

writeStream - 是要放置数据的另一个流。 在我的例子中,这是通过 signedUrl 发出的 Google Cloud Storage 文件 PUT 请求。 part - 是表单部件事件的部件对象。

流是支持 Node.js 应用程序的基本概念之一。 它们是数据处理方法,用于按顺序读取输入或将输入写入输出。

流是一种以高效方式处理读/写文件、网络通信或任何类型的端到端信息交换的方式。

流的独特之处在于,它不是像传统方式那样由程序一次将文件全部读入内存,而是逐条读取数据块,处理其内容而不将其全部保存在内存中。

这使得流在处理大量数据时非常强大,例如,文件大小可能大于您的可用内存空间,因此无法将整个文件读入内存以进行处理。 这就是流来救援的地方!

使用流处理较小的数据块,可以读取较大的文件。

让我们以 YouTube 或 Netflix 等“流媒体”服务为例:这些服务不会让您同时下载视频和音频。 相反,您的浏览器接收视频作为连续的块流,允许接收者几乎立即开始观看和/或收听。

然而,流不仅仅是处理媒体或大数据。 它们还赋予我们代码“可组合性”的力量。 考虑到可组合性进行设计意味着可以以某种方式组合多个组件以产生相同类型的结果。 在 Node.js 中,可以使用流通过管道将数据传入和传出其他较小的代码片段,从而组合出功能强大的代码片段。