簡體   English   中英

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

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM