在 Node 中使用“fs”,我将如何流式传输 CSV 文件?

Posted

技术标签:

【中文标题】在 Node 中使用“fs”,我将如何流式传输 CSV 文件?【英文标题】:Using 'fs' in Node, how would I stream a CSV file? 【发布时间】:2020-04-19 01:55:49 【问题描述】:

使用createReadStream(),我正在尝试流式传输存储在我的程序目录中的CSV 文件,但是,它似乎返回了一个包含文件字节字符串的缓冲区,而不是实际的文本内容。我的印象是readFile() 用于缓冲文件,而createReadStream() 将流式传输文件。也许我只是对流的真正工作方式一无所知。

此时,我只是输出数据以查看程序正在流式传输什么。代码如下:

const fs = require("fs");
const path = require("path");

// These variables set the filepath of the CSV file
const basePath = "./"
const fileName = "dummy.csv"

// Create the path string
const fileLoc = path.join(basePath, fileName);
console.log(fileLoc);

fs.createReadStream(fileLoc).on("data", (data) =>  console.log(data); )

输出:

<Buffer 54 49 54 4c 45 2c 20 41 52 54 49 53 54 2c 20 59 45 41 52 0d 0a 43 61 6e 20 59 6f 75 20 46 65 65 6c 20 4d 79 20 48 65 61 72 74 2c 20 42 72 69 6e 67 20 ... 122 more bytes>

请注意,我没有通过管道传输数据 - 这是因为我想不出将数据传输到哪个可写流,或者我需要做什么才能创建一个。我的问题可能就在这里。

提前致谢

【问题讨论】:

查看一组用于流式传输 csv 文件的预构建模块:google.com/search?q=npm+csv+stream。如果您想了解它们的工作原理,只需查看它们的源代码即可。 仅供参考,您可以使用 buf.toString(...) 将缓冲区转换为 UTF-8 流。 @jfriend00 哇,这么简单的解决方案。谢谢,看来是时候了解一下缓冲区的工作原理了 在 *** 上,在标题中标记您的问题 SOLVED 或将解决方案放入您的问题中不是正确的程序。这不是这里的工作方式。问题仅用于问题,而不是答案。答案在答案中。如果需要,您甚至可以发布自己问题的答案。请编辑您的问题以删除解决方案和“已解决”的内容。我已经发布了一个答案,您可以通过单击其左侧的复选标记来接受该答案,以向社区表明您的问题已得到回答并已完成。这是正确的程序。 @jfriend00 道歉,会的 【参考方案1】:

您可以使用 buf.toString(...) 将缓冲区转换为 UTF-8 字符串。

您也可以只使用预构建的模块来传输 CSV 文件。有很多here on NPM。而且,如果您想了解它们是如何工作的,您可以查看任何这些模块的源代码。

【讨论】:

以上是关于在 Node 中使用“fs”,我将如何流式传输 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C/C++ 中获取用于流式传输的 mp3 音频数据包

如何将视频数据流式传输到视频元素?

如何使用 Node.js 通过 ffmpeg 流式传输 MP4 文件?

使用 Node 流式传输大型大查询 SELECT?

如何使用 node.js 和 socket.io 通过 WebSockets 流式传输 MP3 数据?

Node.js如何流式传输音频文件