2016-11-08 5 views
3

1GBの大規模なサイズのファイルを1GBのRAMメモリを搭載したサーバーにダウンロードしようとしています。以下のコード)、OSはRAM過負荷のためプロセスを強制終了します。Perlの大容量ファイルへのダイレクトダウンロード(RAMの過負荷を避けるため)

require LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
$ua->timeout(3600); 
$ua->env_proxy; 

my $response = $ua->get('http://example.com/largefile.xml'); 

if ($response->is_success) { 
    print "File downloaded\n"; 
} 
else { 
    die $response->status_line; 
} 

私はsystem("wget ...")(またはカールまたは類似のもの)を使用している仕事ができると思いますが、私はPerlで直接それを行うための正しい方法があります確信している唯一の方法。

システムコールを使用せずに直接ファイルにダウンロードする方法やオプションはありますか?

答えて

8

":" 特別です

$ UA->で始まる

フィールド名(...、$ urlには、$ FIELD_NAME => $値)を取得:LWP::UserAgentget方法を見てください。これらはリクエストのヘッダーを初期化するのではなく、応答内容の処理方法を決定します。以下の特別なフィールド名が認識されます。$ filenameは:content_fileオプションが提供されている場合は

:content_file => $filename 

を、その後、応答内容は、ここに保存された代わりに、レスポンスオブジェクトになります。

注 - ファイルシステムのエラーをうまく処理できないため、その場所に書き込むことができます。 (アクセス許可、ディレクトリが存在するなど)

+0

これだけです!既にダウンロード中です、ありがとうございます。 – nanocv

関連する問題