[英]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.