28.08.2009, 21:40
|
|
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нс спустя.
Чуть не забыл, иконка передастся автоматом, у меня работает, пробовал на опере, файрфоксе.
|