Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузка файла через форму  (Прочитано 16087 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mario_315
Гость
« : 10-06-2009 12:07 » 

Добрый день.
Подскажите, пожалуйста, как загрузить файл на сервер через форму.

Есть форма для загрузки файла. Там мы выбираем файл, нажимаем кнопочку и файл грузится на сервер. Надо сделать так, что бы Perl выбирал файл и жал на кнопочку.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-06-2009 12:25 » 

чего надо?
Кто должен жать?
Сформулируй правильно вопрос - получишь правильный ответ

зы, я конечно пнимаю, что ты хотел сказать. Но! Хочу правильный вопрос.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mario_315
Гость
« Ответ #2 : 10-06-2009 12:42 » 

Нужно написать скрипт который автоматически заполняет поле формы (выбирая файл) и жмет кнопку отправки формы.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-06-2009 12:50 » 

так-с первая часть вопроса понятна, теперь сформулирую вторую (в части - жмет)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mario_315
Гость
« Ответ #4 : 10-06-2009 13:29 » 

Переформулирую вопрос:

Допустим есть форма
Код:
<form action='file.php' method='post'>
<input type='text' name='field`>
<input type='pass' name='pass'>
<input type='submit' name='submit'>
</form>

следующим кодом мы ее заполняем и отправляем
Код:
$agent -> submit_form(
              form_number => 1,
              fields => { field => $val1, pass => $val2},
);

А вот как сделать тоже самое, но с типом поле не text, а file?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 10-06-2009 13:37 » 

что тебе известно про LWP?
Удалось ли отправить обычную форму методом POST?
какие бывают content-type?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mario_315
Гость
« Ответ #6 : 10-06-2009 14:08 » 

1. Про LWP известно немного - при использовании LWP::UserAgent'a можно получить содержимое страницы
2. обычную форму удалось отправить как методом POST так и методом GET
3. content-type'ы могут быть текстовыми - это в данном случае вроде не очень надо
могут быть multipart, которые могут состоять из различных типов данных
могут быть image - содержат графические изображения
application данные какого-нибудь приложения

Где-то видел такую строчку LWP::UserAgent->post("multypart");. Куда-то в этом направлении надо копать?  Здесь была моя ладья...
« Последнее редактирование: 10-06-2009 14:10 от mario_315 » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-06-2009 14:17 » 

mario_315, покажи скрипт которым ты отправлял данные обыкновенной формы
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mario_315
Гость
« Ответ #8 : 10-06-2009 14:24 » 

Код:
use strict;
use WWW::Mechanize;

my $val1 = 'blablabla';
my $val2 = 'bla-bla-bla';
my $agent = WWW::Mechanize -> new();

$agent -> get('http://somesite.org');
$agent-> sumbit_form (
                form_number => 1,
                fields => { field1 => $val1, field2 => $val2},
);

print $agent -> content;
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 10-06-2009 14:50 » 

каким методом ты будешь отправлять файл?
какой размер отправляемого файла


смотри в сторону LWP
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mario_315
Гость
« Ответ #10 : 10-06-2009 14:55 » 

Глянул в сторону LWP

Код:
use LWP::UserAgent;

$agent = LWP::UserAgent -> new();
my $resp = $agent -> post("http://localhost/file.php",
       { 'field' => 'value' });
print $content = $resp -> content;

Я так понимаю, что здесь где-то надо добавить multypart?

Размер файла до 1мб максимум
Метод Get или Post - не принципиально (но желательно разобраться как сделать с обоими)

Пойду гляну документацию по LWP

Добавлено через 42 минуты и 56 секунд:
Глянул документацию. Голова кругом Не понял

Написать смог только такое, но не работает. Наверное, неправильно написал  А черт его знает...

Код:
use LWP::UserAgent;

my $file = 'c:\img.jpg';

$ua = LWP::UserAgent -> new();
my $resp = $ua -> post("http://localhost/test/file.php",
                  Content_Type => 'multipart/form-data',
                  Content => [ init => ["$file"],
                  ]);
print $content = $resp -> content;

Буду думать дальше.

Добавлено через 17 минут и 48 секунд:
Было найдено следующее решение

Код:
use strict;
use WWW::Mechanize;

my $file = 'c:\img.jpg';
my $agent = WWW::Mechanize -> new();

$agent -> get('http://localhost/file.php');
$agent -> submit_form(
                form_number => 1,
                fields => {img => $file},
);

print $agent -> content;

Блин, что мешало сразу так сделать? Здесь была моя ладья... Не понял А черт его знает...
Но все-таки хотелось бы и с LWP разобраться
« Последнее редактирование: 10-06-2009 16:24 от mario_315 » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 10-06-2009 16:54 » 

отправка файла методом GET? получилось?
хм ... искать "длина GET запроса"

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mario_315
Гость
« Ответ #12 : 10-06-2009 18:20 » 

У меня в форме стоит метод POST. С GET проверил не работает
Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #13 : 10-06-2009 18:55 » 

mario_315, разницу между GET и POST понимаешь?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
mario_315
Гость
« Ответ #14 : 11-06-2009 05:19 » new

mario_315, разницу между GET и POST понимаешь?

get'ом значения переменных передаются в адресной строке и ограничены каким-то количеством символов
post'ом передаются как-то по другому и размер этих значений может быть гораздо больше чем у get'a.
Вроде так  Скромно так...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines