1

requestインスピレーションギャラリーをスクレイピングし、node.js用のMikealのライブラリを使用して画像をディスクにダウンロードしています。問題は、多くの画像が、ほとんどの場合ダウンロードセッションの開始時に、部分的または全部ではなくダウンロードされることです。これは下の画像に示されています(フォルダはでソートされています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) )
}

配列に格納されているURLから画像データをフェッチし、それをディスクに書き込むにパイプするために使用requestしています。ほとんどの場合、これは正常に機能しますが、ダウンロードの1〜15%が部分的なダウンロードになります。imagesstream

オブジェクトのdrainイベントを使用してを取得して比較しようとしましたが、そのアプローチではどこにも到達しませんでした。これを解決する他のアプローチはありますか?streambytesWrittenbytesTotal

4

2 に答える 2

1

スクリプト全体が表示されない場合、すべてのリクエストが完了する前にプロセスが終了していると思います。以前に提案したように、非同期ライブラリを試すこともできますが、イベントエミッタソリューションを使用して非同期リクエストを最大限に活用することで、これをより速く実現できます。

お役に立てれば!

于 2013-01-09T15:52:35.290 に答える
1

asyncを使用します。async.queueを使用して、有限の並列処理でリクエストを送信する必要があります。コードが実行しているのはimages.length、同時に多数のリクエストを生成しようとしていることです。Node.jsは非I/Oブロッキングです。したがって、スポーンするイベントの数をある程度制御する必要があります。Asyncはあなたが必要とするpackagaeです。

于 2013-01-09T14:50:07.960 に答える