मुझे यह समस्या डेटास्नाप आरईएसटी सर्वर (डेल्फी एक्सई 3) से एक जावास्क्रिप्ट वेब क्लाइंट में विभिन्न फ़ाइल प्रकारों (पीएनजी, पीडीएफ, एक्सएलएसएक्स, डॉक्क्स, इत्यादि ...) डाउनलोड करने का भी प्रयास कर रही है। कुछ ब्राउज़र्स (एस .: फ़ायरफ़ॉक्स) वैसे भी सही कार्रवाई करेंगे, लेकिन सभी नहीं। इंटरनेट एक्सप्लोरर डाउनलोड की गई फ़ाइल के लिए सही सामग्री-प्रकार के बिना उचित कार्रवाई को नहीं पहचानता है। शुरुआत में @ एंडर्स समाधान मेरे लिए काम करता प्रतीत होता है क्योंकि मैं पीडीएफ और फ़ायरफ़ॉक्स के साथ काम कर रहा था। लेकिन जब मैंने आईई (और अन्य) और विभिन्न एक्सटेंशन के साथ परीक्षण किया है, तो फाइलें जिन्हें पहचाना नहीं गया है। FireBug का उपयोग करते हुए मैंने देखा है कि सामग्री प्रकार हमेशा सौंपा एक
GetInvocationMetadata.ResponseContentType := '...my assigned content type ...';
वैकल्पिक हल का उपयोग कर मेरे लिए काम कर पाया था, "text/html" और नहीं है:
ServerMethodsUnit में
var
ContentTypeHeaderToUse: string; // Global variable
TServerMethods1.GetFile(params: JSON):TStream;
begin
.... processing ....
ContentTypeHeaderToUse := '...' (assign correct content type).
end;
WebModuleUnit में
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;
मैं बताए सामग्री-विन्यास के लिए एक समान समाधान के लिए इस्तेमाल किया भी। डाउनलोड करने और अनुलग्नक/इनलाइन मोड में फ़ाइल नाम सेट करने के लिए यह एक उपयोगी हेडर कुंजी है। यह एक कोड है के साथ:
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;
असाइन ContentDispositionHeaderToUse सर्वर तरीकों कार्यान्वयन में।
संपादित
इस तरीके को डेटा संपीड़न सक्षम साथ आईआईएस पर ISAPI DLL में काम नहीं करता! कोई डेटा compressione (स्थानीय debuggin आईआईएस) प्रतिक्रिया हेडर है के साथ:
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
सामग्री-स्वभाव और सामग्री प्रकार DataSnap कोड में सौंपा:
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
लेकिन उत्पादन को सक्षम करने पर प्रतिक्रिया IIS के साथ आता है सामने नहीं आ रहे हैं।