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


Автор: mcsseifer 17.3.2007, 10:58
 Такая ситуация. По пунктам
 1. Пользователь заходит на сайт, в раздел обновления.
 2. Выбирает там себе необходимые файлы, добавляет их себе в корзину
 3. Заходит в раздел корзины
 4. Нажимает кнопочку скачать

 Вот тут вопрос как на perl написать закачку сразу всех файлов. 
 Средствами браузера 
 Пример;
   #!/usr/bin/perl -w

   use strict;

   my (@files);

   @files= ('file.gif', 'dir.gif');
    foreach (@files) {
      print "Content-Disposition: attachment; filename=$_\n";
      print "Content-Type: application/x-force-download; name=\"$_\"\n";
      print "Pragma: no-cache\n\n";
      open(F, $_);
      print while (<F>);
      close(F);
    }

 Сами знаете что получается (кто знает). Один большой файл smile..

 PS: надеюсь понятно поставил вопрос. Заранее Спасибо.

Автор: nitr 17.3.2007, 20:50
создавай архив и выкладывай, многие придумали уже, к примеру, заходишь на сайт, есть раздел Скачать (ПО), выбираешь себе что скачать или создаёшь архив выбранных прог, имхо удобно и трафик экономия ;)

И не стоит придумывать иначе...

Автор: Zuzu 28.3.2007, 09:22
Можно поступить так, как делают программы - музыкальные каталоги. 

Пользователь:
1. Набирает файлы в "корзину"
2. Говорит "скачать"

Программа
1. Архивирует выбранные файлы во временный архив
2a. Отдает сформированный архив в виде потока
либо
2b. Формирует страницу со ссылкой на этот архив (можно и по почте ссылку на эту страницу послать)
3. Удаляет временный архив через некоторое время.



Автор: nitr 28.3.2007, 20:21
Zuzu, угу... я примерно тоже самое предложил smile принцип один.
Очень неплохое решение, и экономит траффик, да и время ;)

Автор: aksined 9.4.2007, 20:10
Надеюсь, не обижу никого тем, что приведу кусочек кода, который работает у меня. Временного архива нет. Он создается в памяти и пишется в поток.

Код

sub two{
    my @qwe = grep {m!^\d+\.img$!} $q->param("req");    
    
    print $q->header(-type => "application/zip", -expires => "now", -content_disposition => "filename=search.zip");
    
    use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
    my $zip = Archive::Zip->new();
    defined $zip || die "can't create zip-object: $!\n";
    foreach(@qwe){
        if(-e "$dir/$_"){
            $zip->addFile("$dir/$_", $_) || die "can't add file $_ to archive: $!\n";
        }
    }
    die "can't write archive to file: $!\n" if ($zip->writeToFileHandle(*STDOUT) != AZ_OK);
}

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