Node.js:如何从url附加文件到(archiverjs)zip

Cri*_*llo 3 javascript zip stream node.js

我有一个包含幻灯片阵列的对象。每个幻灯片都可以具有一个媒体参数,该参数包含指向图像或视频文件的网址,或者指向youtube或vimeo视频的链接。

我的目标是将幻灯片查看器压缩并在zip内压缩,我还必须从URL中获取图像或视频文件。

要创建zip,我目前使用的是Archiver,它可以正常工作,但我不知道如何将媒体文件放入zip中(可能),而不先将它们写入文件系统中。我认为我必须使用流,因为archiver.append()可以将流作为第一个参数,但是我不知道该怎么做。

我已经实现了一些代码来了解url是否指向文件,将文件的url写入数组(避免使用youtube或viemo url)。

这是创建zip的方式:

...
var urls_array = ["http://url1/file1.jpg", "http://url2/file2.png"]; //the array of urls I take the media files from

var zip = archiver('zip');
zip.pipe(res);

zip.directory(__dirname + '/../../zip/', 'slideshow');
zip.append( new Buffer( file ), { name: 'slideshow/assets/slides.json' });
zip.finalize();
Run Code Online (Sandbox Code Playgroud)

我想我必须循环url_array执行,并为每个url执行一次http.get()调用,但是我不明白如何.pipe()在zip中进行响应。

有谁可以帮助我吗?不要犹豫,问我更多信息:)

先感谢您。

Sim*_*ggi 5

您应该使用该request方法从远程URL创建流append,并将其作为第一个参数传递给archiver 的功能,如下所示:

for ( var slide in slides ) {
    archive.append( request( slide.url ), { name: slide.name } );
}
Run Code Online (Sandbox Code Playgroud)

请参阅archiver.append文档(https://archiverjs.com/docs/module-plugins_zip-Zip.html#append

希望能帮助到你。