Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.08.2009, 11:53
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию IdHTTPServer

как отправить файл клиенту?? ну например я создал сервер и обрабатываю входящие запросы:
Код:
procedure TForm1.HTTPCommandGet(AThread: TIdPeerThread;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var str:string;
    st:TStringList;
begin
str:=StringReplace(arequestinfo.document,'/','\',[rfReplaceAll]);
Delete(str,1,1);

if FileExists(ExtractFilePath(Application.ExeName)+str) then
 begin
  st:=TStringList.Create;
  st.LoadFromFile(ExtractFilePath(Application.ExeName)+str);
  AResponseInfo.ContentText:= st.Text;
  st.free;
 end;

if ExtractFileName(ExtractFilePath(Application.ExeName)+str)='favicon.ico' then
 begin
  //
  //  здесь как то надо отправить файл favicon.ico серверу. но как ???  
  //
 end;
memo1.lines.add(ExtractFilePath(Application.ExeName)+str);
end;
при запросе favicon.ico мне нужно отправить файл клиенту (в данном случае - браузеру). как это сделать??
Ответить с цитированием
  #2  
Старый 28.08.2009, 21:40
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Лично я сделал так:
Код:
procedure TwndMain.ServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
    aFilename: string;
    DataStream:TMemoryStream;

    function NormalFileName(fName:string):string;
    var s:string;
    begin
      s := WorkPath + fName;
      s := StringReplace(s,'/','\',[rfReplaceAll]);
      Result := s;
    end;
begin
  _requests := _requests+(Format('Client %s:%d trying to "%s" request on "%s" document at %s',[
                          AContext.Binding.PeerIP,
                          AContext.Binding.PeerPort,
                          ARequestInfo.Command,
                          ARequestInfo.Document,
                          FormatDateTime('yyyy/mm/dd hh:mm:ss', Now)]))+#13#10; //для ведения журнала
  if ARequestInfo.Command <> 'GET' then
  begin
    _messages := _messages+(Format('Client %s:%d used "%s" request at %s',[
                          AContext.Binding.PeerIP,
                          AContext.Binding.PeerPort,
                          ARequestInfo.Command,
                          FormatDateTime('yyyy/mm/dd hh:mm:ss', Now)]))+#13#10;// для ведения журнала
    AResponseInfo.ResponseNo := 501; // 501 ошибка
    aFilename := NormalFileName('/501.htm');
    AResponseInfo.ContentType := GenContType(aFilename);
    AResponseInfo.ContentStream := TFileStream.Create(aFileName,fmShareDenyNone);
    Exit;
  end;
  if ARequestInfo.Document = '/' then
    ARequestInfo.Document := ARequestInfo.Document + 'index.htm';
  aFilename := NormalFileName(ARequestInfo.Document);
  if FileExists(aFilename) then
  begin
    AResponseInfo.ContentType := GenContType(aFilename); // определяет тип содержимого по расширению запрашиваемого файла *.htm == text/html *.txt == text/plain ну и так далее
    AResponseInfo.ResponseNo := 200;// все успешно
    AResponseInfo.ContentStream := TFileStream.Create(aFileName,fmShareDenyNone);
    Exit;
  end;
  _messages := _messages+(Format('Client %s:%d trying to get nonexistent file "%s" at %s',[
                          AContext.Binding.PeerIP,
                          AContext.Binding.PeerPort,
                          ARequestInfo.Document,
                          FormatDateTime('yyyy/mm/dd hh:mm:ss', Now)]))+#13#10;
  aFilename := NormalFileName('/404.htm');//выдаем 404 ошибку
  AResponseInfo.ContentType := GenContType(aFilename);
  AResponseInfo.ResponseNo := 404;
  AResponseInfo.ContentStream := TFileStream.Create(aFileName,fmShareDenyNone);
end;
добавлено 10нс спустя.
Чуть не забыл, иконка передастся автоматом, у меня работает, пробовал на опере, файрфоксе.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 28.08.2009, 21:45
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

тут еще глянь http://www.delphigroups.info/2/11/207358.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 05.09.2009, 16:52
Аватар для Casper-Hacker
Casper-Hacker Casper-Hacker вне форума
Начинающий
 
Регистрация: 19.05.2008
Сообщения: 147
Версия Delphi: x
Репутация: 15
По умолчанию

Код:
procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
//INDEX
if (ARequestInfo.Document='') or (ARequestInfo.Document='/') then begin
AResponseInfo.ContentType:='text/html';
IdHTTPServer1.ServeFile(AThread, AResponseinfo,Edit2.Text+'\'+Edit1.Text) end else
//ERROR 404
if (ARequestInfo.Document<>'') or (ARequestInfo.Document<>'/') then
if fileexists(Edit2.Text+'\'+ARequestInfo.Document)=false then
IdHTTPServer1.ServeFile(AThread, AResponseinfo,Edit2.Text+'\'+Edit3.Text) else
//CONTENT TYPE
begin
if Pos('.GIF',ANSIUPPERCASE(ARequestInfo.Document))>0 then AResponseInfo.ContentType:='image/gif'
else if Pos('.JPG',ANSIUPPERCASE(ARequestInfo.Document))>0 then AResponseInfo.ContentType:='image/jpg'
else if Pos('.JPEG',ANSIUPPERCASE(ARequestInfo.Document))>0 then AResponseInfo.ContentType:='image/jpeg'
else if Pos('.BMP',ANSIUPPERCASE(ARequestInfo.Document))>0 then AResponseInfo.ContentType:='image/bmp'
else if Pos('.PNG',ANSIUPPERCASE(ARequestInfo.Document))>0 then AResponseInfo.ContentType:='image/png'
else if (Pos('.HTML',ANSIUPPERCASE(ARequestInfo.Document))>0) or
(Pos('.HTM',ANSIUPPERCASE(ARequestInfo.Document))>0) or
(Pos('.PHP',ANSIUPPERCASE(ARequestInfo.Document))>0) or
(Pos('.CSS',ANSIUPPERCASE(ARequestInfo.Document))>0) or
(Pos('.TXT',ANSIUPPERCASE(ARequestInfo.Document))>0) or
(Pos('.XML',ANSIUPPERCASE(ARequestInfo.Document))>0) or
(Pos('.JS',ANSIUPPERCASE(ARequestInfo.Document))>0) then AResponseInfo.ContentType:='text/html'
else AResponseInfo.ContentType:='application/octet-stream';
IdHTTPServer1.ServeFile(AThread, AResponseinfo,Edit2.Text+'\'+ARequestInfo.Document);
end;

Edit2 - это путь главного каталога. Edit1 - это главный файл (index.htm, index.php). Edit3 - это файл ошибки 404.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter