1

我正在抓取灵感库并使用 Mikeal 的requestnode.js 库将图像下载到磁盘。问题是一堆图像,主要是在下载会话开始时,最终会部分或全部下载。如下图所示(按 排序的文件夹Date Modified)。在前 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从存储在数组中的 URL 获取图像数据images并将其通过管道传输到stream将其写入磁盘的 a。大多数情况下,这可以正常工作,但有 1% 到 15% 的下载最终是部分下载。

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

4

2 回答 2

1

Without seeing your entire script, I'd guess that your process is terminating before all of your requests have finished. You might try, as previously suggested, the async library, but you can accomplish this faster by taking full advantage of asynchronous requests with an event emitter solution.

Hope this helps!

于 2013-01-09T15:52:35.290 回答
1

使用异步。您必须使用 async.queue 并以有限的并行度发送请求。您的代码正在做的是尝试同时产生images.length多个请求。Node.js 是非 I/O 阻塞的。因此,您需要对产生的事件数量进行一些控制。Async 是您需要的软件包。

于 2013-01-09T14:50:07.960 回答