画像URLからクライアントに保存

perl02

 

LWP::Simple

 

use LWP::Simple;

# 画像のURL
my $image_url = "https://example.jp/img/logo.jpg";


# URLから画像データを取得
my $image_data = get($image_url);

# Content-Dispositionヘッダーを設定
my $filename = "downloaded_image.jpg";
my $disposition = "attachment; filename=$filename";

# HTTPヘッダーを出力
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: $disposition\n\n";

# 画像データを出力
print $image_data;

 

LWP::UserAgent

use LWP::UserAgent;

# 画像のURL
my $image_url = "https://example.jp/img/logo.jpg";

# UserAgentを作成
my $ua = LWP::UserAgent->new;

# URLからレスポンスを取得
my $res = $ua->get($image_url);

# レスポンスが成功した場合
if ($res->is_success) {
    # 画像データを取得
    my $image_data = $res->decoded_content;

    # Content-Dispositionヘッダーを設定
    my $filename = "downloaded_image.jpg";
    my $disposition = "attachment; filename=$filename";

    # HTTPヘッダーを出力
    print "Content-Type: application/octet-stream\n";
    print "Content-Disposition: $disposition\n\n";

    # 画像データを出力
    print $image_data;
} else {
    # エラー処理
    print "Error: " . $res->status_line . "\n";
}

 

JavaScriptと併用

# URLから画像データを取得
my $image_data = get($image_url);

# 一時ファイルを作成し、画像データを書き込む
my $tmp_file = "./temp_image.jpg";
open(my $fh, '>', $tmp_file) or die "Could not open $tmp_file: $!";
print $fh $image_data;
close $fh;

# HTMLとJavaScriptを出力
print "Content-type: text/html\n\n";
print <<EOM;
    <img id="image" src="./temp_image.jpg">
    <button onclick="saveImage()">Save Image</button>
    <script>
        function saveImage() {
            var image = document.getElementById('image').src;
            var filename = 'downloaded_image.jpg';
            var element = document.createElement('a');
            element.setAttribute('href', image);
            element.setAttribute('download', filename);
            element.style.display = 'none';
            document.body.appendChild(element);
            element.click();
            document.body.removeChild(element);
        }
    </script>
EOM