![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как скачать каринку с помощью idHTTPServer [D7, WinXP]
BFG9k © (2006-10-25 13:31:00)
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;
При выполнении этого кода для графического изображения браузер показывает картинку. Как сделать так, чтобы браузер скачивал картинку вместо того, чтобы выводить ее на экран ?
BFG9k (2006-10-26 16:46:00) [1]Плохиш - спасибо. Правда я и сам успел додуматься :) Тема закрыта ...
Styx_ (2006-10-26 16:44:00) [2]С idHTTPServer никогда не работал, поэтому не знаю. Но в PHP, чтобы файл сохранялся, и с правильным названием, пишется так:
header("Content-Disposition: attachment; filename=filename.ext");
Здесь, видимо, как-то через упомянутый RawHeaders
Плохиш (2006-10-26 16:44:00) [3]
AResponseInfo.CustomHeaders.Values['Content-disposition'] := 'attachment; filename="blablabla.jpg"';
BFG9k (2006-10-26 16:40:00) [4]К какого обьекта есть поле contentdisposition ? Кстати, чему должно быть равно значение content-disposition ? Каким образом все-таки можно послать заголовок ? Пробовал с AResponseInfo.RawHeaders - не работает ...
Ketmar (2006-10-26 16:40:00) [5]>[12] BFG9k(c) 26-Oct-2006, 16:40
>К какого обьекта есть поле contentdisposition ?
ни у какого нет.
Ketmar (2006-10-26 15:47:00) [6]есть подозрение, что имелось в виду "надо обрабатывать полученый заголовок, в частности -- поле contentdisposition". %-)
BFG9k (2006-10-26 15:46:00) [7]
> Надо посылать заголовок Content-Disposition
А как это сделать с помощью idHTTPServer ? Свойство ContentType там есть, а вот ContentDisposition отсутствует ...
Styx_ (2006-10-26 15:38:00) [8]Надо посылать заголовок Content-Disposition
BFG9k (2006-10-26 14:39:00) [9]Slym:
idHTTPServer1.ServeFile(AThread,AResponseInfo,FileName);
Появилась новая проблема. На сервере картинки лежат в виде зазипованных файлов. При обращении к этому файлу сервер распаковывает его во временную директорию и возвращает картинку. По когда ее пытаются сохранить на диск описанным выше способом, в имя файла подставляется имя архива. Хотя фактически скачивается распакованная картинка. Искал в ResponseInfo имя документа, но так и не нашел :( В какую сторону копать ?
Slym (2006-10-26 04:07:00) [10]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;
Reindeer Moss Eater (2006-10-25 13:52:00) [11]Перед процессом скачивания следует добавить :
Убедившись предварительно что контент отдается по ссылке предназначенной для скачивания на диск. А не вообще всегда.
Reindeer Moss Eater (2006-10-25 13:50:00) [12]Сервер указывает спец.тип контента, а браузер считает, что рендерить этот контент не надо, а надо сохранить на диске.
Вот и все.
BFG9k (2006-10-25 13:49:00) [13]Перед процессом скачивания следует добавить :
AResponseInfo.contentType:='application/rar-archive';
BFG9k (2006-10-25 13:42:00) [14]
> Этот код не имеет ни малейшего отношения к браузеру.
Естественно он имеет отношение к серверу. Однако браузер способен качать картинки по велению сервера. Например на mail.ru можно скачать прикрепленный к письму файл независимо от формата.
Сергей М. (2006-10-25 13:35:00) [15]Этот код не имеет ни малейшего отношения к браузеру.
Reindeer Moss Eater (2006-10-25 13:34:00) [16]А откуда сервер знает зачем у него просят картинку?
Ему ли не по барабану что там с ней собираются делать?