[英]Where does PERL LWP::Simple getstore save the image?
在读取包含文件名的文本文件后,我尝试使用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";
}
}
根据文档 , getstore(url, file)
将URL作为第一个参数,第二个参数是存储结果的文件名。 如果文件名是相对路径(不是以斜杠/
开头),它将相对于当前工作目录。
但是,您从文件中读取了名称,然后将包括换行符在内的全行作为文件名。 那可能不是您想要的,所以您应该使用chomp
删除换行符。
除此之外:
您首先使用LWP::UserAgent
进行GET
请求以检索文件,但忽略响应,而是在第一个GET
成功的情况下调用getstore
来检索和存储相同的资源。 仅保存第一个GET
的结果,或者仅跳过它并仅使用getstore
会更简单。
您正在使用DATA
作为文件句柄。 尽管这没有错,但是DATA
已经是一个隐式文件句柄,该句柄指向__DATA__
标记之后的程序文件,因此,我建议使用其他文件句柄。
使用简化版本的代码时,文件将成功存储:
use strict;
use warnings;
use LWP::Simple;
my $url = "https://labs.jamesooi.com/images/";
my $file = 'image-list.txt';
open (my $fh, '<', $file) or die "Could not open $file: $!";
while ( <$fh> ) {
chomp; # remove the newline from the end of the line
my $link = $url . $_;
my $filename = $_;
my $rc = getstore($link, $filename);
if (is_success($rc)) {
print "Success\n";
}
else {
print "Error\n";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.