Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 21.05.2008, 17:54   #1
coadmin
Новичок
 
Регистрация: 21.05.2008
Сообщений: 2
Репутация: 10
По умолчанию Закачать файл на сайт и принять ответ

Господа, помогите решить проблему.
Есть веб-страничка с формой ввода имени файла, вот исходник:

<html>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image"><br><br>
<input type="submit" name="loading" value="Загрузить">
</form>
</body>
</html>

Необходимо заполнить поле с именем файла и отправить на сервер, а потом дождаться ответа от сервера об окончании обработки файла. Вроде просто. Плюхнул на форму Webbrowser, пытаюсь задать значение полю (WebBrowser1.OleObject.Document.for ms.Item(0).Item(0).Value := 'test'). Ага, щазз. Ладно, 2 часа ушло на то, чтобы выяснить, что так можно заполнять все поля, кроме "file" - они принципиально недоступны никакому автозаполнению.
ОК. Ищем другой путь. У WebBrowser есть параметр Post, позволяющий передать запрос на сервер. Формируем запрос и отправляем:

EncodedStr := 'file=c:\temp\1\123.jpg';
Post := VarArrayCreate([0, Length(EncodedStr) - 1], varByte);
for I := 1 to Length(EncodedStr) do
Post[I - 1] := Ord(EncodedStr[I]);
Header := 'Content-Type: multipart/form-data' + #10#13;

WebBrowser1.Navigate('http://mytest/zagruzka.php', EmptyParam,
EmptyParam, Post, Header);

И никакой реакции. Может, чего с параметром 'file=c:\temp\1\123.jpg' накосячил? Ладно, попробуем еще. У нас же еще idHTTP есть!
Пишем:
procedure TForm1.Button5Click(Sender: TObject);
var FileName: string;response: string;
formData: TIdMultiPartFormDataStream;
begin
FileName := 'c:\temp\1\123.jpg';
formData := TIdMultiPartFormDataStream.Create;
formData.AddFile('File',fileName,'m ultipart/form-data');
formData.AddFormField('param1', 'value1');
response := idHTTP1.Post('http://mytest/zagruzka.php',formData);
Memo3.Lines.Text:= response;
end;
Ура, файл отправлен. Но я ожидал, что в response будет ответ сервера о результатах обработки файла, а там вместо этого исходный код веб-странички, с которой все начиналось. Если же вручную заполнить поле и нажать кнопочку, то сервак возвращает все как надо, то есть, он не виноват.
Ладно, попробуем максимально приблизиться к ручной работе. Для этого надо установить фокус на строку ввода имени файла, плюхнуть туда имя из буфера, ну дальше понятно. НИГДЕ не нашел, как установить фокус на элемент в WebBrowser. Еще на сам WebBrowser кое-как можно, и то через... ну непрямой путь, а вот на его элементы - не знаю как.
В общем, помогите, кто чем может, а то голова уже распухла. День отдал на программу, на которую планировал полчаса выделить. Заранее благодарен.
coadmin вне форума   Ответить с цитированием
Старый 21.05.2008, 18:05   #2
Квэнди
Профессионал
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Адрес: Москва
Сообщений: 3,859
Репутация: 1192

icq: 637233
По умолчанию

я бы предпочел подобную задачу реализовывать без Twebbrowser а просто post-ом и get-ом хотя бы в тех же Indy
__________________
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума   Ответить с цитированием
Старый 22.05.2008, 10:30   #3
coadmin
Новичок
 
Регистрация: 21.05.2008
Сообщений: 2
Репутация: 10
По умолчанию

Так ведь idHTTP - как раз из Indy компонент для этих дел. И он, действительно, реально отправляет файл. Но как после отправки тут же принять ответ сервера о результатах обработки файла? У меня не получилось
coadmin вне форума   Ответить с цитированием
Старый 22.05.2008, 10:43   #4
Квэнди
Профессионал
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Адрес: Москва
Сообщений: 3,859
Репутация: 1192

icq: 637233
По умолчанию

Смотрите внимательно исходный код 99% переадресация там происходит JS-м
__________________
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума   Ответить с цитированием
Старый 22.08.2008, 23:19   #5
eldar
Форумчанин
 
Аватар для eldar
 
Регистрация: 04.08.2008
Сообщений: 154
Репутация: 22
Злость

Цитата:
Сообщение от Квэнди Посмотреть сообщение
я бы предпочел подобную задачу реализовывать без Twebbrowser а просто post-ом и get-ом хотя бы в тех же Indy
да да да ответ сервера принять индейцем не как!
я сам с такой проблемой сижу
посто запрос отправляю, а кучу гет запросов принять не могу
eldar вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправить , а потом принять пакет. casper123 Работа с сетью в Delphi 3 16.08.2008 02:56
Как принять GET запрос eldar Работа с сетью в Delphi 2 11.08.2008 00:19
Как принять сообщение (SendMessage) Crazyman Win Api 4 20.02.2008 05:42
не могу закачать файл из этого сайта Rahim1993 О форуме и сайтах клуба 4 03.01.2008 15:29


11:22.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru