How to pass a Buffer as argument of fs.createReadStream
根据文档
https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options
fs.createReadStream()可以接受Buffer作为第一个参数
我的节点代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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) |
但是我得到这个错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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. (/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作为path参数,传递" binary"不可用,我应该提供什么选项。
我在Node 6.11.0和Node 8.4.0上都尝试过
似乎您正在尝试将文件内容传递给
如果您要执行的操作是从缓冲区(不涉及文件)创建可读流,那么您需要以其他方式进行处理。您可以在此处查看操作方法:如何将缓冲区包装为stream2可读流?
@ jfriend00已经对此问题提供了非常清晰的解释。如果将Buffer对象作为参数传递给fs.createReadStream(),则它应指示文件路径,而不是文件内容。正如@Littlee在评论中要求的那样,这是示例代码:
1 2 3 4 5 6 7 8 | var express = require('express'); var router = express.Router(); var fs = require('fs') router.get('/test', function(req, res) { var buf = Buffer.from('./test.html'); fs.createReadStream(buf).pipe(res); }); |
请注意,缓冲区