Pérdida de memoria del servidor Delphi Datasnap usando TFileStream como valor de retorno
Necesito una función en un servidor de datos, que devuelve un archivo .zip. Entonces comencé con:
function TGetData.getZip (): TFileStream;
begin
result := TFileStream.Create('test.zip', fmOpenRead and fmShareDenyWrite);
end
Esto funciona bien, pero datasnap no lo libera, así que recibo un error de pérdida de memoria.
Siguiente intento: comencé en "TWebModule1.WebModuleAfterDispatch". Pensé que podría ayudar enviar mi respuesta con "response.SendResponse"; y liberar mi transmisión por mi cuenta. Así que aquí una versión corta:
procedure TWebModule1.WebModuleAfterDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
test : TFileStream;
begin
response.ContentType := 'application/x-zip-compressed';
test := TFileStream.Create('test.zip', fmOpenRead);
response.ContentStream := test;
response.CustomHeaders.Values['Content-Disposition'] := 'attachment; filename=test12.zip';
response.SendResponse; //Also sendStream didn't help
test.Free;
end;
Esta es casi la solución, creo, pero el servidor de datos envía un código html después de que se envió mi transmisión y esto se escribe al final del archivo.
Lo sé, el servidor de datos no admite TFileStream. En cambio, debería usar TDBXStreamValue, pero parece que no hay ningún ejemplo que funcione ...
¿Alguien tiene experiencia con tal problema?