【发布时间】:2017-08-26 01:53:35
【问题描述】:
根据文档 https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options
fs.createReadStream() 可以接受 Buffer 作为第一个参数
我的节点代码:
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)
我只想知道,如果我想传递一个 Buffer 作为路径参数,我应该提供哪些选项,传递 'binary' 是行不通的。
我在 Node 6.11.0 和 Node 8.4.0 上都尝试过
【问题讨论】:
-
文件路径最终必须是操作系统将接受的字符串,并且不能是随机二进制文件,因此不清楚您通过缓冲区传递的目的是什么。如果你传递一个缓冲区,它大概会在上面调用
.toString()。 -
@ivo - 该帖子与
fs.createReadStream()的第一个参数无关。 -
如果
Buffer作为参数传递给fs.createReadStream(),它应该指示文件路径,而不是文件内容。 -
@shaochuancs 能给我看看代码吗?
标签: node.js