IdHTTPProxyServer выдача файла с локального диска
В роли прокси использую IdHTTPProxyServer, картинки записываю на диск без проблем.
А вот выдавать их с локального компьютера не очень получается =(.
Может кто сталкивался с такой проблемой?
UnicodeString &AData, TIdContext *AContext)
{
...
...
if(type_file==".gif"|| type_file==".png"|| type_file==".jpg")
{
if(FileExists(file_patch))
{
file_patch = Replace(file_patch,"\\","/");
AData = "FILE "+file_patch+" HTTP/1.1";
Memo1->Lines->Add("Файл из кеша");
Memo1->Lines->Add(AData);
}
}
}
Пример:
Файл из кеша
FILE C:/prog_c/proxy/Debug/images/img1.gif HTTP/1.1
Может его как-то по другому выдавать нужно? В папке данный файл существует...
GET http://www.SITE.ru/images/img1.gif HTTP/1.1
по логике вещей меняю путь на свой локальный... ГЕТ, заменяю на FILE
RFC 2616 HTTP - там описано как работать с сервером...
На компьютере локальном нет сервера, и я не вижу в нем смысла.
Задача стоит - выдать документ с локального диска, а не из интернета...
И вообще откуда такая команда взялась - FILE? Я помню только GET, POST и HEAD.
Сейчас детально его изучил. И реализовал по своему).
Вообщем кому интересно решение:
UnicodeString &AData, TIdContext *AContext)
{
//существует ли файл на диске?
if(FileExists(file_patch))
{
//если существует, тогда загружаем с диска
AContext->Connection->IOHandler->WriteFile(file_patch);
//разрываем соединение
AContext->Connection->Disconnect();
Memo1->Lines->Add("Файл из кеша");
Memo1->Lines->Add(file_patch);
}
}
Раз уж там такое решение там бы и спрашивали...
Вопрос был по существу, и уверен достаточно многим интересный.
Логично было предположить - что нужно каким-то образом нужно запретить загрузку файла из интернета, а загрузить его в поток. В этом и заключался вопрос, как это сделать...
Сейчас детально его изучил. И реализовал по своему).
Вообщем кому интересно решение:
UnicodeString &AData, TIdContext *AContext)
{
//существует ли файл на диске?
if(FileExists(file_patch))
{
//если существует, тогда загружаем с диска
AContext->Connection->IOHandler->WriteFile(file_patch);
//разрываем соединение
AContext->Connection->Disconnect();
Memo1->Lines->Add("Файл из кеша");
Memo1->Lines->Add(file_patch);
}
}
напиши плизз, откуда берешь file_patch и как узнаешь тип файла)
Вопрос был по существу, и уверен достаточно многим интересный.
Логично было предположить - что нужно каким-то образом нужно запретить загрузку файла из интернета, а загрузить его в поток. В этом и заключался вопрос, как это сделать...
1. Phodopus прав по поводу FILE - я на 100% уверен, что там никакой путь передаваться не должен. Подумайте сами, на кой он сдался клиенту, который находится вообще на другой машине? То, что у вас и клиент, и сервер в одном месте - скорее исключение. В этом свете решение "с другого форума" мне представляется правильным.
2. Подозреваю, что file_patch на самом деле должен называться file_path...
3. Дабы понять, что не так с передаваемым файлом, добавьте перед
AContext->Connection->IOHandler->WriteFile(file_patch);
запись этого файла куда-нибудь в c:\tmp.tmp и потом посмотрите, что туда на самом деле записалось.
4. Ну, и проверьте, что у вас реально находися в file_path и file_type (MessageBox'ом или дебаггером, например).
Расширить 3-й пункт можно ещё так: создайте тестовый проект с клиентом, который будет просто принимать всё и записывать (dump) куда-то во временный файл. А вы потом откроете этот лог в хекс-редакторе и посмотрите, что там вам сервер на самом деле понаприсылал.