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

Вниз

Как скачать каринку с помощью idHTTPServer   Найти похожие ветки 

 
BFG9k ©   (2006-10-25 13:31) [0]

procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var FileStream:TFileStream;
   FileName:string;
begin
 AResponseInfo.FreeContentStream:=False;

 FileName:=ARequestInfo.Document;

 FileName:=fRoot+FileName;

 FileStream:=TFileStream.Create(FileName, fmOpenRead);

 try
   AResponseInfo.ContentStream:=FileStream;
   AResponseInfo.WriteContent;
 finally
   FileStream.Free;
 end;
end;


При выполнении этого кода для графического изображения браузер показывает картинку. Как сделать так, чтобы браузер скачивал картинку вместо того, чтобы выводить ее на экран ?


 
Reindeer Moss Eater ©   (2006-10-25 13:34) [1]

А откуда сервер знает зачем у него просят картинку?
Ему ли не по барабану что там с ней собираются делать?


 
Сергей М. ©   (2006-10-25 13:35) [2]

Этот код не имеет ни малейшего отношения к браузеру.


 
BFG9k ©   (2006-10-25 13:42) [3]


> Этот код не имеет ни малейшего отношения к браузеру.

 Естественно он имеет отношение к серверу. Однако браузер способен качать картинки по велению сервера. Например на mail.ru можно скачать прикрепленный к письму файл независимо от формата.


 
BFG9k ©   (2006-10-25 13:49) [4]

Перед процессом скачивания следует добавить :

 AResponseInfo.contentType:="application/rar-archive";


 
Reindeer Moss Eater ©   (2006-10-25 13:50) [5]

Сервер указывает спец.тип контента, а браузер считает, что рендерить этот контент не надо, а надо сохранить на диске.
Вот и все.


 
Reindeer Moss Eater ©   (2006-10-25 13:52) [6]

Перед процессом скачивания следует добавить :

Убедившись предварительно что контент отдается по ссылке предназначенной для скачивания на диск. А не вообще всегда.


 
Slym ©   (2006-10-26 04:07) [7]

procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var FileName:string;
begin
FileName:=ARequestInfo.Document;
//Обязятельно обработать FileName на наличие выхода из корня аля ..\..\..
FileName:=fRoot+FileName;
AResponseInfo.ServeFile(AThread,FileName);
end;


 
BFG9k ©   (2006-10-26 14:39) [8]

Slym:

 idHTTPServer1.ServeFile(AThread,AResponseInfo,FileName);


Появилась новая проблема. На сервере картинки лежат в виде зазипованных файлов. При обращении к этому файлу сервер распаковывает его во временную директорию и возвращает картинку. По когда ее пытаются сохранить на диск описанным выше способом, в имя файла подставляется имя архива. Хотя фактически скачивается распакованная картинка. Искал в ResponseInfo имя документа, но так и не нашел :( В какую сторону копать ?


 
Styx_   (2006-10-26 15:38) [9]

Надо посылать заголовок Content-Disposition


 
BFG9k ©   (2006-10-26 15:46) [10]


> Надо посылать заголовок Content-Disposition


А как это сделать с помощью idHTTPServer ? Свойство ContentType там есть, а вот ContentDisposition отсутствует ...


 
Ketmar ©   (2006-10-26 15:47) [11]

есть подозрение, что имелось в виду "надо обрабатывать полученый заголовок, в частности -- поле contentdisposition". %-)


 
BFG9k ©   (2006-10-26 16:40) [12]

К какого обьекта есть поле contentdisposition ?  Кстати, чему должно быть равно значение content-disposition ?  Каким образом все-таки можно послать заголовок ? Пробовал с AResponseInfo.RawHeaders - не работает ...


 
Ketmar ©   (2006-10-26 16:40) [13]

>[12] BFG9k(c) 26-Oct-2006, 16:40
>К какого обьекта есть поле contentdisposition ?
ни у какого нет.


 
Styx_   (2006-10-26 16:44) [14]

С idHTTPServer никогда не работал, поэтому не знаю. Но в PHP, чтобы файл сохранялся, и с правильным названием, пишется так:
header("Content-Disposition: attachment; filename=filename.ext");
Здесь, видимо, как-то через упомянутый RawHeaders


 
Плохиш ©   (2006-10-26 16:44) [15]

AResponseInfo.CustomHeaders.Values["Content-disposition"] := "attachment; filename="blablabla.jpg"";


 
BFG9k ©   (2006-10-26 16:46) [16]

Плохиш - спасибо. Правда я и сам успел додуматься :) Тема закрыта ...



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

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

Наверх




Память: 0.5 MB
Время: 0.04 c
15-1164191127
miek
2006-11-22 13:25
2006.12.10
WinXP: запретить выход в инет


2-1164443388
Серый
2006-11-25 11:29
2006.12.10
Word


2-1164564062
Defort
2006-11-26 21:01
2006.12.10
Контекстное меню в DBGrid


2-1164206856
KyRo
2006-11-22 17:47
2006.12.10
Не могу удалить директорию


2-1162976091
first_may
2006-11-08 11:54
2006.12.10
Директива $IFDEF