Falls ich perfmon vertrauen kann, dann ist es mit TfileStream (erwartet) nicht so. Ich hab's nun auch überprüft: Setze in Web.HttpApp bei procedure TWebResponse.SendStream(AStream: TStream); einen Breakpoint, dann siehst du wie Buffer für Buffer (1MB) gesendet wird und so der Arbeitsspeicher vom Server nicht überlastet wird.
Also so:
Delphi-Quellcode:
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
fn : string;
tf : tfileStream;
begin
fn := 'C:\inetpub\wwwroot\test.bin';
Response.Content := '';
Response.ContentType := 'application/octet-stream';
Response.CustomHeaders.Values['Content-Disposition'] := 'attachment; filename=test.bin';
tf := tfilestream.Create( fn, fmopenread or fmShareDenyWrite );
Response.ContentStream := tf;
handled := true;
end;
Ich setze hier zusätzlich auch noch den gewünschten Filenamen (muss natürlich nicht dem Filenamen auf dem Server entsprechen).
Hi Michael,
danke für deine Hilfe! Ich habe jetzt mal deinen Code getestet, gleiches Verhalten. Wie bist du in das SendStream rein gekommen? Ich habe hier lediglich ein
procedure SendResponse; virtual; abstract;
bzw ein
procedure SendStream(AStream: TStream); virtual; abstract;
. Leider nur die deklaration und keine Implementierung in der Web.HTTPApp.
Ich habe mir auch in dem WEbmodul einen Pfad definiert, mache es also nicht im BeforeDispatch, aber das sollte ja eigentlich nicht stören oder?
vG
PJM