Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Как подгружать картинки в страницу, которую генерит TСPServer?   Найти похожие ветки 

 
arche   (2003-10-27 09:25) [0]

Я создал простой сервер на TTCPServer, который у меня нормально отдает HTML документ, но есть такая проблема: как подгружать в этот документ картинки и т.п., т.е. где надо указать путь ассоциированный с localhost, откуда эти картинки бы подгружались?


 
Reindeer Moss Eater ©   (2003-10-27 09:29) [1]

В html код вклей ссылку на картинку.


 
arche   (2003-10-27 09:39) [2]

мне нужно чтобы код в html был такой (без C:\ или file:///C:/):

<img src="/img/picture.gif" />

т.е. как в программе прописать этот "корень", откуда будет все грузиться?


 
Reindeer Moss Eater ©   (2003-10-27 09:41) [3]

Странный ты.
Сервер - твой.
Где картинки лежат - знаешь.
А какой путь прописать - спрашиваешь на форуме.


 
arche   (2003-10-27 09:55) [4]

Весь html документ я отдаю вручную, т.е. примерно так:
ClientSocket.SendLn("HTTP 1/1 .. и т.п. ..)
...
ClientSocket.SendLn("<html><img src=/img/pic.gif /></html>");
..

Так откуда этот путь (/img/pic.gif) будет читаться на компе?


 
Anatoly Podgoretsky ©   (2003-10-27 09:58) [5]

Из текущего root для страницы


 
Reindeer Moss Eater ©   (2003-10-27 10:00) [6]

Клиент увидев такую ссылку, запросит у твоего сервера документ pic.gif из подкаталога img


 
arche   (2003-10-27 10:06) [7]

Так а как мне етот root определить???
Страницы-то самой физически не существует!!
Я же отсылаю клиенту только текст, который генерится в памяти из БД.


 
Reindeer Moss Eater ©   (2003-10-27 10:09) [8]

А зачем такую ссылку в html для клиента делаешь?


 
Reindeer Moss Eater ©   (2003-10-27 10:09) [9]

И где наконец находятся файлы рисунков?


 
Reindeer Moss Eater ©   (2003-10-27 10:14) [10]

Так откуда этот путь (/img/pic.gif) будет читаться на компе?

Этот путь придет обратно с клиента на сервер (если браузер клиента закачивает картинки).

И серверу никто не мешает отдать картинку из
/img/pic.gif
или
"/совсем другой каталог/pic.gif"


 
arche   (2003-10-27 10:18) [11]

Ну так мне самому и нужно узнать куда класть рисунки, т.е. где программно прописать root, к которому клиенту за рисунком лезть?
т.е. как прописать этот Root?
Как это делают все обычные сервера? Мы прописываем в конфиге путь к рутовой директории, а в html документе пишем уже путь от этого корня.
Так как и где для моего случая программно прописать этот путь к корню (к какой-нить определенной папке на диске)?


 
Reindeer Moss Eater ©   (2003-10-27 10:22) [12]

Ну так мне самому и нужно узнать куда класть рисунки
Где удобно, туда и складывай.
Что бы работало без дополнительной обработки путей - устанавливай текущий каталог для процесса веб-сервера и пляши от него.


 
arche   (2003-10-27 10:27) [13]

устанавливай текущий каталог для процесса веб-сервера

А как и где его установить? Вот в чем суть вопроса.


 
Reindeer Moss Eater ©   (2003-10-27 10:37) [14]

Это не суть вопроса.
Это твое желание и больше ничего.
Не хочешь устанавливать - используй каталог из которого запущен веб-сервер


 
Reindeer Moss Eater ©   (2003-10-27 10:40) [15]

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


 
arche   (2003-10-27 10:56) [16]

1. Ты сказал:
устанавливай текущий каталог для процесса веб-сервера

После чего я задал тебе конкретный вопрос:
А как и где его установить?

Мне нужен ответ на этот вопрос.

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

Ладно, допустим я ничего не понимаю. Тогда пожалуйста популярно объясни, как эта картинка в итоге попадает в браузер клиента?


 
Reindeer Moss Eater ©   (2003-10-27 11:01) [17]

А как и где его установить?

Как - SetCurrentDir
Где - в коде твоего веб сервера. Например сразу после его запуска.


 
Gawk ©   (2003-10-27 11:01) [18]


> А как и где его установить? Вот в чем суть вопроса.

function SetCurrentDir(const Dir: string): Boolean;


 
arche   (2003-10-27 11:18) [19]

Спасибо, это все, что я хотел узнать, вечером поэкспериментирую.


 
arche   (2003-10-28 20:24) [20]

А вот и не работает нифига... :(
Пишу значит:


if SetCurrentDir("F:\") then
...
else
ShowMessage("Can`t set current directory!");
end;


ну типа директория устанавливается, а картинка не показывается,
а путь к картинке такой: "F:\a.gif"
А html код для картинки: <img src="a.gif"/>
и не показывается. Что делать?


 
Reindeer Moss Eater ©   (2003-10-29 09:05) [21]

ну типа директория устанавливается, а картинка не показывается,

Если начать думать, то скоро станет ясно, что "картинка не показывается" - это из области проблем клиента, а не сервера (ибо сервер картинки не показывает, он их отдает по запросу клиента).

Ты же в настоящее время точишь код своего сервера.
Попробуй ответить на такой вопро:с "А браузер вообще-то запрашивал у сервера эту картинку?"


 
arche   (2003-10-29 09:11) [22]

to: Reindeer Moss Eater

Ты по-моему изначально не правильно меня понял.
дело в том, что если прописать полный путь к картинке так:

<img src="F:\a.gif" />

то картинка показывается!
Но я хочу, чтобы картинка показывалась при таком написании:

<img src="a.gif" />

Как это сделать?


 
Reindeer Moss Eater ©   (2003-10-29 09:22) [23]

Следи за движением руки:

Браузер запросил у твоего сервера некий URL.
Твой сервер составил HTML документ со ссылкой на GIF и отдал его клиенту.
Браузер клиента настроен на показ графики. Поэтому он извлекает из полученного документа ссылку и передает её твоему серверу(второй URL).
Процесс твоего сервер ищет в своем текущем каталоге файл "a.gif" и не находит.

Вопросы:
1. Почему сервер вписывает в HTML документ ссылку на файл, которую потом он сам же не может найти?

2. Что мешает твоему серверу обработать неправильную ссылку на файл и прочитать его оттуда, где он лежит на самом деле?


 
arche   (2003-10-29 09:43) [24]

Давай разбираться.
Я понимаю работу своего сервера так:

1. От клиента приходит запрос с хедерами:


HTTP 1/1 ..
...


и т.д.

2. Я в сервере обрабатываю URL, и отдаю клиенту html:


ClientSocket.SendLn("HTTP 1/1 200");
...
ClientSocket.SendLn("<html>.... </html>");
...


3. Больше я никаких дополнительных запросов к моему TCPServer от клиента не наблюдаю! (у меня все в лог пишется).

4. Где я ошибаюся? Клиент запрашивает картинку уже не от моего сервера что-ли? Как конкретно решить проблему?


 
Reindeer Moss Eater ©   (2003-10-29 09:58) [25]

Больше я никаких дополнительных запросов к моему TCPServer от клиента не наблюдаю!

Чего же ты хочешь?
Чтобы клиент получил картинку сервера, он её должен попросить у сервера.


 
arche   (2003-10-29 10:19) [26]

что за бред? Как я скажу Internet Explorer"у что бы он еще запросил и картинку?? Глупости..

Я же говорю, если прописать путь <img src="F:\a.gif" />, то все показывается! И ничего он не запрашивает и в явном виде и не должен запрашивать!

Кто-нибудь, помогите конкретным советом!


 
Reindeer Moss Eater ©   (2003-10-29 10:23) [27]

Тогда бред пишешь ты:

3. Больше я никаких дополнительных запросов к моему TCPServer от клиента не наблюдаю! (у меня все в лог пишется).


 
Reindeer Moss Eater ©   (2003-10-29 10:24) [28]

И ничего он не запрашивает и в явном виде и не должен запрашивать!

Не кури больше.


 
Reindeer Moss Eater ©   (2003-10-29 10:27) [29]

Вот тебе хороший совет:

Поймай момент прихода запроса от клиента на катинку
и выведи в лог содержимое текущего каталога в этот момент.


 
arche   (2003-10-29 10:35) [30]


> Поймай момент прихода запроса от клиента на катинку


Как поймать этот момент?
У сервера есть только эти события:

OnAccept
OnCreateHandle
OnDestroyHandle
OnGetThread
OnListening

У меня весь функционал прописан в OnAccept().
(Иногда возникает событие OnGetHandle, но я так и не понял, зачем оно и когда возникает :( )


 
Reindeer Moss Eater ©   (2003-10-29 10:39) [31]

OnCommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);


 
arche   (2003-10-29 10:45) [32]

ну это в Indy компоненте.
А в моем случае (TTCPServer) этого сделать нельзя что-ли?


 
Reindeer Moss Eater ©   (2003-10-29 10:48) [33]

Стало быть ты руками реализуешь HTTP протокол?
Тогда вообще не понимаю твоего вопроса.
Все данные запросов клиента проходят через твои руки.


 
arche   (2003-10-29 10:54) [34]

Ну приходят ко мне заголовки и все.
что я там могу еще увидеть??


 
Reindeer Moss Eater ©   (2003-10-29 10:58) [35]

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


 
arche   (2003-10-29 10:59) [36]

Да и заголовков этих приходит всего четыре что-ли..


 
Плохиш_   (2003-10-29 11:00) [37]

Блин детский сад какой-то :-(
И никто так и не догадался заглянуть в конфиг-файл веб-сервера :-(


 
Reindeer Moss Eater ©   (2003-10-29 11:03) [38]

Плохиш_
Сначала надо догадаться, что у его самописного веб-сервера вообще есть файл с конфигом


 
arche   (2003-10-29 11:04) [39]

В смысле эти заголовки приходят в одной пачке при запросе URL.
т.е. на событие OnAccept я начинаю принимать пакет заголовков:


HTTP 1/1 ..
Contnt-Type ..
..
Server ..


и ничего про запрос картинки нету :(

и все. больше ничего до запроса новой страницы не приходит.


 
arche   (2003-10-29 11:07) [40]


> Плохиш_
,

Какой конфиг? У меня запущен только мой TCPServer который ловит запросы и все.
и никаких там апачей с конфигами.


 
Reindeer Moss Eater ©   (2003-10-29 11:14) [41]

Короче: изучи спецификацию протокола HTTP.
У меня не так много кофейной гущи осталось


 
Плохиш_   (2003-10-29 11:14) [42]

Ах, так он у тебя ещё и локально работает?
Ню, ню
Если станицы смотришь в браузере (будем надеяться), то урлы с "/..." ищутся от адреса, а без от всей строчки в строке адреса.


 
Плохиш_   (2003-10-29 11:16) [43]

>Reindeer Moss Eater © (29.10.03 11:14) [41]

> У меня не так много кофейной гущи осталось

:-)
Почему-то вопрошающие всегда считают, что штатным телепатам отпуска и выходные не положены ;-))


 
arche   (2003-10-29 11:24) [44]

Ладно, оюъясню на примере конкретном.
Есть такая прога TINY.EXE от компании ritlabs (www.ritlabs.com)
Короче она на дельфях написана и все такое. Можете запускать хоть локально хоть нет. Картинки отображает так, как мне бы хотелось. Т.е. там задается путь к рутовой директории, а оттуда уже и ищутся картинки и загружаются.

Я в ней разбирался разбирался, но так и не понял как там это делается. Слишком замороченный код для меня :(
Вопрос такой (для тех кто сталкивался с этим): как это делается??? Т.е. как и где указать рутовe. директорию, чтобы оттуда нормально загружались картинки при таком HTML:
<img src="a.gif" />
??


 
Плохиш_   (2003-10-29 11:26) [45]

Короче, мы все побежали изучать программу TINY.EXE


 
savva ©   (2003-10-29 11:27) [46]

ты бы привел бы сюда все свои "три-четыре" запроса от клиента - и тебе бы показали где браузер хочет картинку..


 
arche   (2003-10-29 11:37) [47]

Все, мне уже тут один чел прямо указал, где конкретно копать и в чем я был не прав. Всем огромное спасибо за внимание,
особенно "Reindeer Moss Eater" :) Ему же совет: поменьше демагогии, побольше конкретики.


 
savva ©   (2003-10-29 11:51) [48]

этот же самый совет и тебе пригодится..


 
arche   (2003-10-29 11:56) [49]

Спасибо за совет, учту!



Страницы: 1 2 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.023 c
3-86242
Слэш
2003-12-04 11:48
2003.12.26
Как составить такой SQL запрос ?


1-86411
Ivolg
2003-12-14 16:20
2003.12.26
Canvas


1-86450
lucky4me
2003-12-12 11:17
2003.12.26
ООП в Object Pascal


3-86298
bss
2003-12-04 09:52
2003.12.26
Delphi->ADO->Access, недостаточно сведений ключевого поля


14-86548
Думкин
2003-12-02 06:04
2003.12.26
С днем рождения! 2 декабря.