Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Как скачать каринку с помощью 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.044 c
15-1163923518
KilkennyCat
2006-11-19 11:05
2006.12.10
Ну что, приняли нас в ВТО, или еще нет?


2-1164042627
lobach
2006-11-20 20:10
2006.12.10
Как проверить существование пункта в listbox?


3-1160132563
Ikela
2006-10-06 15:02
2006.12.10
TDBGrid


3-1159863133
svt
2006-10-03 12:12
2006.12.10
Подскажите как написать запрос, чтобы за каждый месяц


3-1159976497
Sanya_BBB
2006-10-04 19:41
2006.12.10
Как внести данные сразу в главную и дочернюю таблицы. В сетевой Б





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский