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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 18:45   #1
zicon
 
Регистрация: 17.08.2009
Сообщений: 3
По умолчанию Отправка файла в броузер

Всем доброго времени суток

Делаю такое вот извращение
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
ms: TMemoryStream;
begin
s:=Socket.ReceiveText;
Memo2.Lines.Add(s);
if pos('GET /',s)<>0 then  fil:=copy(s,pos('GET /',s)+Length('GET /'),pos(' HTTP/1.1',s)-pos('GET /',s)-Length('GET /'));
if FileExists(fil)=true then begin
ms:= TMemoryStream.Create;
ms.LoadFromFile(fil);
ms.Position:= 0;
Memo2.Lines.Add('отправка '+fil);
//Socket.SendText(inttostr(ms.Size));
Socket.SendStream(ms);
end else  begin
Socket.SendText('CHTTP/1.1 200 Ok'#13#10);
Socket.SendText('Content-Type: text/html'#13#10);
Socket.SendText(''#13#10);
Socket.SendText(Memo1.Text);
end;
Socket.Close;
end;
соответственно в броузере при конекте http://localhost:91 получаю страничку, сгенерированную из html записанного в мемо1

Проблема вот в чем, при передачи текстового файла (<a href=xz.txt>)
броузер удачно выводит и сохраняет исходный файл, но при передачи картинки(jpg,bmp) или бинарника, я получаю файл того же размера что и исходный, но битый, т.е не читаемый, в чем может быть проблема?

Последний раз редактировалось Stilet; 05.02.2011 в 16:00.
zicon вне форума Ответить с цитированием
Старый 04.02.2011, 18:48   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> в чем может быть проблема?

вот в этом:

Код:
Socket.SendText('Content-Type: text/html'#13#10);
Картинка — это не текст, и не хтмл.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.02.2011, 20:01   #3
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Для начала необходимо отправить HTTP заголовки
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s: String;
  i: integer;
  path: string;
  ms: TMemoryStream;
begin
  s := Socket.ReceiveText;
  i := PosEx(' ', s) + 1;
  path := Copy(s, i, PosEx(' ', s, i) - i);
  if path = '/' then
  begin
    s := '<img src="/image.php">';
    Socket.SendText('HTTP/1.0 200 OK'#13#10'Content-Length: ' +
      IntToStr(Length(s)) + #13#10#13#10 + s);
  end;
  if path = '/image.php' then
  begin
    ms := TMemoryStream.Create;
    ms.LoadFromFile('c:\1.jpg');
    ms.Position := 0;
    Socket.SendText('HTTP/1.0 200 OK'#13#10'Content-Length: ' +
      IntToStr(ms.Size) + #13#10#13#10);
    Socket.SendStream(ms)
  end;
end;
kangreon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при загрузке файла через броузер _PROGRAMM_ PHP 6 24.01.2011 08:52
Отправка файла. denizkin Работа с сетью в Delphi 1 02.11.2010 01:53
Веб Броузер BaiAs Общие вопросы Delphi 3 02.06.2010 08:30
отправка файла по почте DeDoK Работа с сетью в Delphi 1 10.11.2008 10:13
Отправка файла на сервер kirill555 PHP 8 21.12.2007 12:51