gpt4 book ai didi

node.js - 如何将缓冲区作为 fs.createReadStream 的参数传递

转载 作者:行者123 更新时间:2023-12-04 03:10:42 37 4
gpt4 key购买 nike

根据文档
https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options

fs.createReadStream() 可以接受 Buffer 作为第一个参数

我的 Node 代码:

var _ = require('lodash')
var faker = require('faker')
var http = require('http')
var fs = require('fs')
var xlsx = require('node-xlsx')

var gg = _.range(10).map((item) => {
return _.range(10).map((item) => {
return faker.name.findName()
})
})

http.createServer(function(req, res) {
var buf = xlsx.build([{
name: 'sheet1',
data: gg
}])
fs.createReadStream(buf, 'binary').pipe(res)

}).listen(9090)

但我收到此错误:
events.js:160
throw er; // Unhandled 'error' event
^

Error: Path must be a string without null bytes
at nullCheck (fs.js:135:14)
at Object.fs.open (fs.js:627:8)
at ReadStream.open (fs.js:1951:6)
at new ReadStream (fs.js:1938:10)
at Object.fs.createReadStream (fs.js:1885:10)
at Server.<anonymous> (/Users/xpg/project/test/index.js:18:6)
at emitTwo (events.js:106:13)
at Server.emit (events.js:191:7)
at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:546:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)

enter image description here

我只想知道,如果我想将 Buffer 作为路径参数传递,我应该提供哪些选项,传递“二进制”不起作用。

我在 Node 6.11.0 和 Node 8.4.0 上都尝试过

最佳答案

fs.createReadStream() 的第一个参数必须是文件路径。您显然可以在 Buffer 对象中传递路径,但是当 Buffer 转换为字符串时,它仍然必须是可接受的操作系统路径。
看来您正试图将文件内容传递给 fs.createReadStream() .这不是该 API 的工作方式。如果您查看 fs.createReadStream() 的代码代码中很清楚它要调用 fs.open()并从 fs.createReadStream() 传递第一个参数作为 fs.open() 的文件路径.
如果您想要做的是从缓冲区(不涉及文件)创建可读流,那么您需要以不同的方式来做。你可以在这个答案中看到如何做到这一点:Converting a Buffer into a ReadableStream in Node.js .
从概念上讲,您只需创建一个可读流对象,将您已有的数据从您的缓冲区中推送到其中,推送一个 null表示流的结束并创建一个 noop _read()方法,你就完成了。然后,您可以将该可读流与任何其他希望读取它的代码一起使用。

关于node.js - 如何将缓冲区作为 fs.createReadStream 的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891242/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com