networking抓取:当使用Mikeal的node.js请求模块时,接近15%的结果是部分下载

我正在刮一个灵感画廊,并使用Mikeal的node.js request库将图像下载到磁盘。 问题是,一大堆图像,主要是在下载会话开始,最终部分或全部下载。 这在下面的图片中显示(按Date Modifiedsorting的文件夹)。 在前17张图像之后,其余的可以从第3行第4列开始下载。

部分下载

以下是我使用的node.js / request代码的相关部分:

 // images is an array of URLs to .jpg images for( var i = 0, len = images.length ; i < len ; i++ ) { request.get( images[i] ).pipe( fs.createWriteStream(destinationFilename) ) } 

我正在使用request从存储在images数组中的URL中获取图像数据,并将其stream到将数据写入磁盘的数据stream 。 大多数情况下,这个工作正常,但下载的1%到15%之间的部分下载。

我试图使用stream对象的stream事件来获取bytesWritten并将其与bytesTotal进行比较,但是这种方法没有得到我的任何地方。 还有其他方法可以解决这个问题吗?

使用asynchronous 。 您必须使用async.queue并发送具有有限并行性的请求。 你的代码正在做的是试图同时产生的images.length数量的请求。 Node.js是非I / O阻塞。 所以你需要一些控制你产生的事件的数量。 asynchronous是你需要的软件包。

没有看到你的整个脚本,我猜你的程序在所有的请求完成之前就会终止。 正如以前所build议的那样,您可以尝试使用asynchronous库,但通过充分利用事件发送器解决scheme的asynchronous请求,可以更快地完成此任务。

希望这可以帮助!