2009-05-29 26 views
7

私は、Perlを使ってHTTPサーバーからイメージを取得しようとしています。なぜPerlのLWPで画像をダウンロードすると、サイズの違うファイルが出るのですか?

私は、ファイルの完全なURLを持っているし、今

my $data = LWP::Simple::get $params{URL}; 
my $filename = "image.jpg"; 
open (FH, ">$filename"); 
print FH $data; 
close (FH); 

を使用しようとしています、論理的に、私には、少なくとも、これは動作するはずです。しかし、ファイルはサイズが少し違っているので、私はその理由を理解できません。

ヘルプ!

+0

どのようなサイズですか? – chaos

+0

ファイルのサイズが異なるのは唯一の問題ですか?少し軽いですか?ユーザーに送信されるイメージは、サーバー上のイメージと同じですか? –

+0

20k画像が30バイトずれていた可能性があります。 Dave Hintonはこの問題を解決しました。私はbinmodeで走っていませんでした。 – Xetius

答えて

14

イメージデータをディスクに正しく書き込むには、binmodeを使用する必要があります。

my $data = LWP::Simple::get $params{URL}; 
my $filename = "image.jpg"; 
open (FH, ">$filename"); 
binmode (FH); 
print FH $data; 
close (FH); 

それ以外の場合は、テキストとして解釈され、改行が混乱します。

+0

私はそれが何か単純でなければならないことを知っていました。 – Xetius

+2

このようなグローバルファイルハンドルは必要ありません。 File :: Slurpのwrite_fileまたはLWP :: Simple :: getstoreを使用します。 –

+0

binmodeのすぐ隣に大きな緑色のチェックマークがあります。 – ysth

13

Daveが正しい場合は、ファイルハンドルをバイナリモードに設定する必要があります。しかし、あなたは一度にすべてを行うことができます:

LWP::Simple::getstore($params{URL}, 'image.jpg'); 
関連する問題