Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

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

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

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

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

Блог

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

У меня немного по другому:
Посылается 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, 02:32   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а HEAD запрос не пробовали?
и далее тот же Content-Disposition
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.06.2011, 13: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, 13:32   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
помоему можно без события,
после idhttp1.head(...);
через idhttp1.Response
Что-то в Response Content-Disposition не нашел.
W0LF вне форума Ответить с цитированием
Старый 05.06.2011, 14: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, 14:15   #9
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Цитата:
...После этого можете в заголовках ответа посмотреть имя оригинального файла...
Ну и как же?
А то, что Вы сохранили картинку - какой в этом вообще смысл?
W0LF вне форума Ответить с цитированием
Старый 05.06.2011, 14: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 в 14:19.
Voody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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