我正在尝试使用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";
}
}
答案 0 :(得分:3)
根据
the documentation,
getstore(url, file)
将URL作为第一个参数,第二个参数是存储结果的文件名。如果文件名是相对路径(它不以斜杠/
开头),则它将相对于当前工作目录。
但是您从文件中读取名称,然后将整行(包括换行符)视为文件名。这可能不是您想要的,因此您应该使用chomp
删除换行符。
除此之外:
您正在使用GET
执行LWP::UserAgent
请求以检索文件但忽略响应,而是调用getstore
以检索并存储相同的资源(如果第一个{ {1}}成功了。只保存第一个GET
的结果或者只是跳过它并仅使用GET
会更简单。
您正在使用getstore
作为文件句柄。虽然这没有错,但DATA
已经是一个隐式文件句柄,它指向DATA
标记之后的程序文件,所以我建议使用不同的文件句柄。
使用简化版本的代码时,文件成功存储:
__DATA__