Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Передача рисунков по сети


Автор: Phantom_of_the_Opera 4.5.2004, 02:41
У меня написано что-то типа:

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => "http://....../..jpg");
$res = $ua->request($req);
open(F, ">..");
print F $res->content;

Полученный файл представляет собой либо радужные полосы, либо вообще не отображается!!!
Подскажите, будьте добры!

Автор: korob2001 4.5.2004, 05:24
Насколько я понял, то ты пытаешься сохранить файл изображения в Windows и всё проходит без ошибок, но файл сохраняется повреждённым? Если да, то сразу после открытия файла вызови функцию binmode( дескриптор файла );
Скобки можешь опустить, как тебе больше нравится.

Вот пример:
Код

open( F, "> .." ) or die $!
binmode( F );
print F $res->content;


Удачи. ;)

Автор: korob2001 5.5.2004, 00:57
Хотя я бы на твоём месте использовал бы модуль LWP::Simple, мне кажется это будет гораздо проще.
Вот тебе пример:
Код

#!/usr/bin/perl -w
use strict;
use warnings;
use LWP::Simple;

#Путь к каталогу с фотками
my $url    = 'http://your_site.ru/mypict';

# Имя каталога куда будем сохранить фотки
my $path = 'download';

# Имена файлов
my @photos = qw( ph1.gif myphoto.jpg );

# Здесь мы будем хранить первую букву имени файла
my $first_letter;
           
# Создадим каталог который указали в переменной $path,
# но только в том случае если он не существует
mkdir( "$path", 0755 ) or die $! unless -e $path;

# Проходим в цикле весь массив с именами фалов
while ( my $file = shift( @photos ) ) {

      # Тащим из каждого названия файла первую букву
      # и переводим её в верхний регистр
      $first_letter = uc( substr( $file,0,1 ) );  
     
      # Если файл уже есть, значит мы его больше сохранять не
      # будем. Переходим к следующей итерации цикла.
      next if -e "$path/$first_letter/$file";
                                               
      # В следующей строке в каталоге, куда
      # мы указали будут складываться файлы,
      # создаём каталог с именем первой буквы
      # имени файла, но делаем это только в том
      # случае если такого каталога пока ещё нет
      mkdir("$path/$first_letter", 0755)
                     or die $! unless -e "$path/$first_letter";

   # Следующая строка просто подгружает нужный
   # нам файл, в нужное место;)
   getstore( "$url/$file", "$path/$first_letter/$file" );

   # Следующие строки дают нам знать, что происходит
   # в данный момент
   print "File ( $path/$first_letter/$file ) successfuly saved\n";
   print '-' x 80, "\n";
}  # Завершили цикл

Вот и всё. С помощью того же LWP::Simple можно создать и список файлов. Заметь, если убрать коментарии, то прога получится очень даже не большая. Вообще-то я писал эту прогу, когда мне нужно было скачать все модули с www.activestate.com . Именно потому я сделал так, что бы она сортировала файлы в отдельные папки, по алфавиту.

Для запуска, просто вызови эту прогу из командной строки.

Удачи.

Автор: Phantom_of_the_Opera 10.5.2004, 05:35
Спасибо, korob2001, очень помог!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)