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

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

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


Ответ
 
Опции темы
Старый 03.06.2011, 15:06   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,455
Вопрос Получить имя файла из ссылки(в конце ссылки нет имени файла)

Добрый день/вечер всем!

Есть ссылка:
http://www.iconsearch.ru/download.ph..._id=546&size=5

как видно, в конце ссылки нет имени файла. Но когда клюкаешь по ссылка браузер определяет имя файла, который качается по этой ссылке.

Собственно как такое сделать в delphi?
Человек_Борща вне форума Ответить с цитированием
Старый 03.06.2011, 18:43   #2
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Я сейчас тоже занимаюсь подобным вопросом. Тема о TClientSocket. Вот то, что нашел. http://citforum.ru/internet/webservers/webserver/
Получается так:
Браузер посылает Get запрос серверу. Сервер отправляет страницу. Браузер ищет ссылки в html и опять отправляет get запросы, соответственно, после каждого запроса сервер отправляет файлы. У данной ссылки get-данные сервер обрабатывает и отправляет файл. Как-то так.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 03.06.2011 в 18:50.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 04.06.2011, 00:51   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,455
По умолчанию

У меня немного по другому:
Посылается GET запрос: http://www.iconsearch.ru/download.ph..._id=546&size=5

В ответ сервер шлет вот примерно такую шапку:

Цитата:
HTTP/1.1 200 OK
Date: Fri, 03 Jun 2011 21:51:18 GMT
Server: Apache/2.2.17 (FreeBSD) mod_ssl/2.2.17 OpenSSL/0.9.8n DAV/2 PHP/5.3.6 with Suhosin-Patch
X-Powered-By: PHP/5.3.6
Content-Disposition: attachment; filename="1downarrow.png"
Content-Length: 4199
Content-Type: image/png
Максимум что я придумал, это прогуглить приходящую шапку и вытащить оттуда имя файла и его размер.
Человек_Борща вне форума Ответить с цитированием
Старый 04.06.2011, 01:32   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

а HEAD запрос не пробовали?
и далее тот же Content-Disposition
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.06.2011, 12:28   #5
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Код:
uses
  IdHeaderList;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdHTTP1.Head('http://www.iconsearch.ru/download.php?icon_id=546&size=5');
end;

procedure TForm1.IdHTTP1HeadersAvailable(Sender: TObject;
  AHeaders: TIdHeaderList; var VContinue: Boolean);
var
  CD: string;
begin
  CD := AHeaders.Values['Content-Disposition'];
  ShowMessage(Copy(CD, Pos('="', CD)+Length('="'), Length(CD)-Pos('="', CD)+Length('="')-4));
end;
Канечно код не самый красивый и т.д., но зато он работает.
W0LF вне форума Ответить с цитированием
Старый 05.06.2011, 12:32   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

помоему можно без события,
после idhttp1.head(...);
через idhttp1.Response
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.06.2011, 12:33   #7
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
помоему можно без события,
после idhttp1.head(...);
через idhttp1.Response
Что-то в Response Content-Disposition не нашел.
W0LF вне форума Ответить с цитированием
Старый 05.06.2011, 13:05   #8
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Код:
var FS:TFileStream;
begin
 FS:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'demo.png',FMCreate);
 idHTTP1.Get('http://www.iconsearch.ru/download.php?icon_id=546&size=5',FS);
 FS.Free;
end;
Всё, картинка сохранена под именем demo.png. После этого можете в заголовках ответа посмотреть имя оригинального файла и переименовать файл
Voody вне форума Ответить с цитированием
Старый 05.06.2011, 13:15   #9
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Цитата:
...После этого можете в заголовках ответа посмотреть имя оригинального файла...
Ну и как же?
А то, что Вы сохранили картинку - какой в этом вообще смысл?
W0LF вне форума Ответить с цитированием
Старый 05.06.2011, 13:17   #10
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Цитата:
Сообщение от W0LF Посмотреть сообщение
Ну и как же?
А то, что Вы сохранили картинку - какой в этом вообще смысл?
Вот полный код, что я тестировал:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var FS:TFileStream;
begin
 FS:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'demo.png',FMCreate);
 idHTTP1.Get('http://www.iconsearch.ru/download.php?icon_id=546&size=5',FS);
 FS.Free;
 Memo1.Text:=idHTTP1.Response.RawHeaders.Text;
end;
И что вы думаете оказалось в Memo1?
Цитата:
Date: Sun, 05 Jun 2011 10:17:10 GMT
Server: Apache/2.2.17 (FreeBSD) mod_ssl/2.2.17 OpenSSL/0.9.8n DAV/2 PHP/5.3.6 with Suhosin-Patch
X-Powered-By: PHP/5.3.6
Content-Disposition: attachment; filename="1downarrow.png"
Content-Length: 4199
Content-Type: image/png
Я думаю без проблем отсюда вытянуть "1downarrow.png"

Если смысл не в получении картинки и ее имени, то в чем тогда вопрос ТС?

Последний раз редактировалось Voody; 05.06.2011 в 13:19.
Voody вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить имя файла? Maxx Microsoft Office Excel 4 02.09.2009 12:54
Отвязать ссылки сводной таблицы от файла ALev Microsoft Office Excel 0 01.07.2009 13:39
Получить ссылки из HTML-файла tsimokhin Общие вопросы Delphi 2 01.05.2009 08:57
Закачка файла с ссылки Titan123 Работа с сетью в Delphi 5 20.10.2008 12:25
Как получить имя файла Crazyman Работа с сетью в Delphi 4 10.07.2008 23:47


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS