我正在使用节点-存档( https://github.com/archiverjs/node-archiver )在内存上创建一个zip文件。使用归档器的管道特性,我将所有的东西都输送到一个转换流中。如果需要,我可以将这个流传输到一个文件中,但是我希望让Request ( https://github.com/request )读取这个流,这样我就不必进入文件系统了。
下面,我的转换流称为bridge。在转换方面,我没有做任何特别的事情(我相信它也可能是一个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是否要求读取流是一个文件流--我在这里还可能做错什么。
发布于 2016-07-22 18:36:24
我也有类似的问题,发现nodejs和requestjs都没有问题。
这是HTTP的一个限制。在没有已知内容长度的情况下,您无法上传文件,直到完成转换,才能知道文件的长度。参见:HTTP POST: content-length header required?
唯一的方法,你可以通过上传小块在一次,与可读的事件。不过,这将需要目标api允许块或多部分上传。
https://stackoverflow.com/questions/35564232
复制相似问题