Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   Perl »   простая загрузка графики в CGI-PERL
RSS

простая загрузка графики в CGI-PERL

Помогите правильно загрузить картинку на сайт

Текущий рейтинг темы: 7.0000

<<Назад  Вперед>>Печать
 
SoundMaster
Новичок


Всего сообщений: 1
Рейтинг пользователя: 0





Дата регистрации на форуме:
4 июня 2007
Господа, у меня возникла проблема: не умею создавать грамотного uploada графики. Надо, что бы программа (CGI на PERL) приняла единственное поле с именем file, в котором лежит .JPG пользователя. Далее, прога должна проверить 3 вещи: размер (kb), Размер ШxВ, формат (.JPG). Если ширина = 100px, Высота = 75px, вес <= 25 kb, формат = .jpg, то прога должна записать эту картинку в каталог htdocs/graphics с новым именем (к примеру: "mypicture.jpg"), в противном же случае прога должна вывести в браузер сообщение об ошибке (одно на все случаи). Умоляю, напишите код (с разъяснениями в сложных моментах) и киньте на e-mail: Lord-exclusive@list.ru
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Вот пример кода:


#!/usr/bin/perl



use CGI::Carp "fatalsToBrowser";          # Output errors to browser

use CGI qw(:standard);                    # Saves loads of work

$CGI::POST_MAX = 32768;    # макс. размер POST-запроса (и файла, соответственно, тоже)



$query = new CGI;  # в объекте $query — данные нашего HTTP-запроса

$picture=$query->param('picture');   # получаем указатель поле с загружаемой картинкой. Для загружаемых файлов этот указатель является file handle



open(FILE,">$imagesdir"."avatars/tempfile.tmp"); # открываем файл, в который нужно сохранить загруженную картинку, именно здесь нужно указать свой собственный путь

binmode FILE; # работа с файлом — в двоичном режиме, чтобы картинка не попортилась

print FILE while (<$picture>); # записываем в новый файл FILE данные до тех пор, пока удается что-то прочитать из файла $picture;

close(FILE); # закрываем файл

$pictype=&ScanIMG("$imagesdir"."avatars/tempfile.tmp"); # вызываем функцию проверки файла

      if ($pictype == 0) {$XErrorMsg="Файл со значком не является GIF или JPEG файлом или он поврежден." }

      else

      { if ($picname !~ /([\w-]+ \. (?: gif))$/ix && $pictype==1 ) {$picname=$picname.'.gif'; }

        elsif ($picname !~ /([\w-]+ \. (?: jpe?g))$/ix && $pictype==2 ) {$picname=$picname+'.jpg'; }

        if (-e "$imagesdir"."avatars/$picname")

        { $XErrorMsg="Ошибка загрузки: файл с таким именем уже существует.";

        }

        else

        {  rename("$imagesdir"."avatars/tempfile.tmp","$imagesdir"."avatars/$picname");

           $XErrorMsg="Значок $picname успешно загружен.";

        }

print $XErrorMsg; # выводим результат проверки



Библиотека CGI является стандартной, а функция ScanImg описана в файле, который я прикладываю к этому сообщению. Сейчас загрузка делается так: файл загружается сначала с временным именем, а потом переименовывается в то имя, которое было указано при загрузке. Внимание! Проверки на опасные символы я тут не делал!

Файл с функцией ScanImg приложен отдельно. Его можно либо поместить в твой скрипт, либо сделать include. Если по каким-то причинам не хочешь использовать его, сходи на CPAN и поищи модули работы с графикой там.

Примечание: некоторые комментарии оказались перенесенными. На самом деле они должны быть написаны либо на той же строчке, либо в их начале нужно тоже поставить #

И последнее: читай правила форума! На почту я никому ничего не высылаю принципиально. Если надо — пользуйся стандартными функциями форума. Если не можешь — просматривай вручную.

Прикрепленный файл (scanimg.cgi, 4367 байт, скачан: 465 раз)
---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
<<Назад  Вперед>>Печать
Объединенный Открытый Проект »   Программирование »   Perl »   простая загрузка графики в CGI-PERL
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0301. Количество выполненных запросов: 19, время выполнения запросов 0.0195