我正在使用 node-archiver ( https://github.com/archiverjs/node-archiver ) 在内存上创建一个 zip 文件。使用归档器的管道功能,我将所有内容通过管道传输到转换流。如果需要,我可以将此流通过管道传输到文件,但我想让 Request ( https://github.com/request ) 读取此流,因此我不必访问文件系统。
下面,我的转换流被称为bridge
. 我没有在 Transform 上做任何特别的事情(我相信它也可能是 PassThrough 流)。
var archive = archiver('zip');
archive.pipe(bridge);
var r = request.post(url, function(err, res, body){ .... }
var form = r.form();
form.append('token', <some token>);
form.append('file', bridge, { "filename" : "package.zip", "contentType" : "application/zip" });
archive.append(<some string>, { "name": <some file name> });
archive.finalize();
这不起作用(这file
部分似乎是空的)。但是,如果我将我的桥转换流通过管道传输到文件写入流——并且在流完成后——我在表单文件操作中为该文件创建一个读取流,它就可以工作。当然,因为现在我有一个完整的文件并且request
可以读取它(这里我不需要桥,只需要常规fs
流)
bridge.pipe(fs.createWriteStream(<myfile>));
var archive = archiver('zip');
archive.pipe(bridge);
bridge.on("finish", function(){
var r = request.post(url, function(err, res, body){ .... }
var form = r.form();
form.append('token', <some token>);
form.append('file', fs.createReadStream(<myfile>), { "filename" : "package.zip", "contentType" : "application/zip" });
}
archive.append(<some string>, { "name": <some file name> });
archive.finalize();
我想知道是否request
要求读取流是文件流——以及我在这里可能做错什么。