Bu problemi, farklı bir dosya türünü (png, pdf, xlsx, docx, etc ...) DataSnap REST sunucusundan (Delphi XE3) bir JavaScript web istemcisine indirmeye çalışıyorum. Bazı tarayıcılar (es .: FireFox) yine de doğru eylemde bulunacaklar, ancak hepsi değil. Internet Explorer, indirilen dosya için doğru içerik türü olmadan uygun eylemi tanımıyor. @Anders çözümü başlangıçta benim için çalışacak gibi görünüyor çünkü PDF ve Firefox ile çalışıyordum. Ama IE (ve diğerleri) üzerinde ve farklı uzantıları ile test ettiğimde, tanınamayan dosyalar. O Content-Type benim için çalışmayı bulundu
GetInvocationMetadata.ResponseContentType := '...my assigned content type ...';
geçici çözüm kullanılarak atanmış bir "text/html" her zaman ve değil gördüğüm FireBug kullanarak geçerli: ServerMethodsUnit olarak
var
ContentTypeHeaderToUse: string; // Global variable
TServerMethods1.GetFile(params: JSON):TStream;
begin
.... processing ....
ContentTypeHeaderToUse := '...' (assign correct content type).
end;
WebModuleUnit olarak
procedure TWebModule1.WebModuleAfterDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if ContentTypeHeaderToUse<>'' then begin
Response.ContentType := ContentTypeHeaderToUse;
ContentTypeHeaderToUse := ''; // Reset global variable
end;
end;
I içerikli-Disposition atamak için benzer bir çözümü kullanılan çok. Bu, dosya adını indirme ve ek/satır içi moduna ayarlamak için kullanışlı bir başlık anahtarıdır.
procedure TWebModule1.WebModuleAfterDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if ContentDispositionHeaderToUse<>'' then begin
Response.SetCustomHeader('content-disposition',ContentDispositionHeaderToUse);
ContentDispositionHeaderToUse := '';
end;
if ContentTypeHeaderToUse<>'' then begin
Response.ContentType := ContentTypeHeaderToUse;
ContentTypeHeaderToUse := '';
end;
end;
Ata ContentDispositionHeaderToUse sunucu yöntemleri uygulamaya: kodudur bu biriyle .
DÜZENLEME
Bu geçici çözüm veri sıkıştırma özellikli ile IIS üzerinde ISAPI DLL çalışmaz!hiçbir veri compressione (yerel debuggin IIS) yanıt başlığı olduğu ile : DataSnap kodunda atanan
Content-Encoding gzip
Content-Length 11663
Content-Type text/html
Date Thu, 11 Sep 2014 21:56:43 GMT
Pragma dssession=682384.52215.879906,dssessionexpires=1200000
Server Microsoft-IIS/7.5
Vary Accept-Encoding
X-Powered-By ASP.NET
Content-disposition ve içerik türüyle:
Connection close
Content-Disposition inline; filename="Privacy-0.rtf.pdf"
Content-Length 150205
Content-Type application/pdf; charset=ISO-8859-1
Pragma dssession=28177.371935.39223,dssessionexpires=1200000
ancak etkin üretimle
yanıtı IIS ile geliyor yüzeysel değildir.