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

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

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

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



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

простая загрузка графики в 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
Откуда: Москва
Всего сообщений: 3031
Рейтинг пользователя: 75





Дата регистрации на форуме:
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 байт, скачан: 378 раз)
---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
<<Назад  Вперед>>Печать
Объединенный Открытый Проект »   Программирование »   Perl »   простая загрузка графики в CGI-PERL
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.2552. Количество выполненных запросов: 18, время выполнения запросов 0.1027
Rambler's Top100