Текущий архив: 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 который ловит запросы и все.
и никаких там апачей с конфигами.
Страницы: 1 2 вся ветка
Текущий архив: 2003.12.26;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.008 c