Утечка памяти на сервере Delphi Datasnap с использованием TFileStream в качестве возвращаемого значения
мне нужна функция в datasnap-сервере, которая возвращает файл .zip. Итак, я начал с:
function TGetData.getZip (): TFileStream;
begin
result := TFileStream.Create('test.zip', fmOpenRead and fmShareDenyWrite);
end
Это работает нормально, но datasnap не освобождает его, поэтому я получаю ошибку утечки памяти.
Следующая попытка: я начал с "TWebModule1.WebModuleAfterDispatch". Я думал, что это может помочь отправить мой ответ с "response.SendResponse;" и освободить мой поток самостоятельно. Итак, короткая версия:
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;
Я думаю, что это почти решение, но datasnap-сервер отправляет html-код после того, как мой поток был отправлен, и это записывается в конце файла.
Я знаю, что datasnap-сервер поддерживает TFileStream. Вместо этого я должен использовать TDBXStreamValue, но, похоже, не работает пример ...
Есть ли у кого-нибудь опыт с такой проблемой?