从JavaScript对象伪造Node.js可读文件流

从JavaScript对象伪造Node.js可读文件流,javascript,node.js,stream,Javascript,Node.js,Stream,我想从javascript对象创建一个“假文件”,因为我使用的libarry需要一个文件作为输入,但我在内存中有一个对象 因此,它期待类似这样的代码 var file = fs.readFileSync('{/path/to/file}'); lib.addDocument(config, file), 我想从一个我称为payload的对象创建一个假文件,然后发送它,我迄今为止最接近的尝试如下所示: var fake_file = new stream.Readable({ object

我想从javascript对象创建一个“假文件”,因为我使用的libarry需要一个文件作为输入,但我在内存中有一个对象

因此,它期待类似这样的代码

var file = fs.readFileSync('{/path/to/file}');

lib.addDocument(config, file),
我想从一个我称为payload的对象创建一个假文件,然后发送它,我迄今为止最接近的尝试如下所示:

  var fake_file = new stream.Readable({ objectMode: true });
  fake_file.push(msg.payload);
  fake_file.push(null);
  lib.addDocument(config, fake_file),
我觉得我离得很近,但我不能让它发挥作用。当前错误为

{ Error: Unexpected end of multipart data
对于v10以下和v4以上的旧版本:

var Readable = require('stream').Readable
var obj = { objectMode : true};
var chars=JSON.stringify(obj).split('');
function read(n){this.push(chars.shift())}
var rStream = new Readable({read:read});
lib.addDocument(config, rStream)
您的代码缺少对象->字符串转换。可能会使用JSON.stringify:

lib.addDocument(config, JSON.stringify(msg.payload));

预期的转化率是多少?我的代码现在是:var Readable=require('stream')。Readable var fake_file=new Readable fake_file.push(JSON.stringify(msg.payload));伪_file.push(null);但我仍然收到“意外的多部分数据结束”错误您使用的是哪个版本的节点?v10中有一些API更改。您需要的基本上是从字符串创建一个可读的流。找出你的节点版本,并通过JSON.stringify传递你的对象,以获得它的字符串表示形式[info]node.js版本:v6.10.3是的,我已经打开了相关文档,我似乎找不到正确的函数调用集并给出了答案。发现这个答案很有帮助:尝试了一下,没有错误,但是libarry的调用现在挂起了。我不认为数据进入了假文件,当我console.log它时,我看到“length:0”,但库需要一个流。可读,所以只传递一个字符串不会正常工作?@gwilym readFileSync返回一个字符串(或缓冲区)。如果你的第一个代码是正确的,我的代码也会工作…这让我很接近。我不得不强制元数据:{“content-type”:“application/json”}来让它工作,但现在我在库中遇到了一个错误,我认为“TypeError:source.on不是一个函数”
lib.addDocument(config, JSON.stringify(msg.payload));