-1

File::Fetchモジュールを使用してダウンロードしたファイルのハッシュを作成しようとしています。ダウンロードしたファイル名とそのハッシュをデータベースにレコードとして保存しようとしています。ただし、File::Fetchオブジェクトのどのメソッドもダウンロードされたファイルを提供しません。ファイルのハッシュを作成するためにファイルを変数にダウンロードする方法はありますか?

これが私のコードの抜粋です、

eval{
    $uri_handle = File::Fetch->new(uri => $nurl) or die "Could'nt create fetch object\n";
    $getfile = $uri_handle ->output_file or die "There is no file to be fetched\n";
    my $dir_handle = $uri_handle->fetch( to => $dir2 ) or die "Couldn't fetch file: $uri_handle->error\n";
    # print "$getfile was successfully saved to $dir\n";
};
if ($@){
        print "\n There is no file at $url\n\n";            
}else{              
    my $file_data_handle = DBI->connect($database_connection_string,$database_user,$database_pass) or die "Couldn't open database: $DBI::errstr\n";
    my $file_statement_handle = $file_data_handle->prepare('insert into files (filename,filehash,sourceurl,originalurl) VALUES ($getfile,$filehash,$nurl,$url)') or die "Couldn't prepare statement: $DBI::errstr\n";
    $file_statement_handle->execute() or die "Couldn't execute statement: $DBI::errstr\n";
    $file_data_handle->disconnect();
}
4

1 に答える 1

3

結果をディスクに直接書き込みます。代わりにLWPを使用してください。

use Digest::MD5    qw( md5_hex );
use LWP::UserAgent qw( );

my $ua = LWP::UserAgent->new();
my $response = $ua->get($url);
die $response->status_line if !$response->is_success;
my $file = $response->decoded_content( charset => 'none' );
my $md5_hex = md5_hex($file);
于 2012-12-03T09:39:41.757 に答える