PERL LWP :: Simple getstore在哪里保存图像?

时间:2017-09-09 16:05:39

标签: perl http

我正在尝试使用perl getstore在读取包含文件名的文本文件后从URL获取图像列表,我创建了代码并能够成功运行它但我不知道文件保存在哪里,我检查磁盘大小并显示每次运行代码时硬盘空闲空间减少,所以我假设有文件已保存但我无法找到它。那么perl getstore保存文件在哪里以及从链接保存图像的正确方法是什么?

use strict;
use warnings;
use LWP::UserAgent;
use LWP::Simple;

my $url = "https://labs.jamesooi.com/images/";
my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36");

my $file = 'image-list.txt';
open (DATA, $file) or die "Could not open $file: $!";

while(<DATA>){
  my $link = "$url" . "$_";
  my $filename = "$_";
  print $link;
  print $filename;

  my $req = HTTP::Request->new(GET => $link);
  my $res = $ua->request($req);
  if($res->is_success){
    my $rc = getstore($link, $filename);
    if(is_success($rc)){
      print "Success\n";
    }else{
      print "Error\n";
    }
  } else {
    print $res->status_line, "\n";
  }
}

1 个答案:

答案 0 :(得分:3)

根据 the documentationgetstore(url, file)将URL作为第一个参数,第二个参数是存储结果的文件名。如果文件名是相对路径(它不以斜杠/开头),则它将相对于当前工作目录。

但是您从文件中读取名称,然后将整行(包括换行符)视为文件名。这可能不是您想要的,因此您应该使用chomp删除换行符。

除此之外:

  • 您正在使用GET执行LWP::UserAgent请求以检索文件但忽略响应,而是调用getstore以检索并存储相同的资源(如果第一个{ {1}}成功了。只保存第一个GET的结果或者只是跳过它并仅使用GET会更简单。

  • 您正在使用getstore作为文件句柄。虽然这没有错,但DATA已经是一个隐式文件句柄,它指向DATA标记之后的程序文件,所以我建议使用不同的文件句柄。

使用简化版本的代码时,文件成功存储:

__DATA__