首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用TFileStream作为返回值的Delphi DatasNAP服务器内存泄漏?

使用TFileStream作为返回值的Delphi DatasNAP服务器内存泄漏?
EN

Stack Overflow用户
提问于 2018-07-26 06:54:45
回答 1查看 0关注 0票数 0

我需要一个数据NAP服务器中的函数,它返回一个.zip文件。所以我开始说:

代码语言:txt
复制
function TGetData.getZip (): TFileStream;
begin
   result := TFileStream.Create('test.zip', fmOpenRead and fmShareDenyWrite);
end

这很好,但是DataNAP并没有释放它,所以我得到了一个内存泄漏错误。

下一次尝试:我从“TWebModule1.WebModuleAfterDispatp”开始。我想用“Response.endResponse”来回应我的反应,然后自己释放我的小溪,这样会有帮助。下面是一个简短的版本:

代码语言:txt
复制
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;

这几乎是我认为的解决方案,但是在我的流被发送之后,数据NAP服务器会发送html代码,这是在文件末尾写的。

我知道,数据NAP服务器支持TFileStream。相反,我应该使用TDBXStreamValue,但是似乎没有工作示例.

对这样的问题有什么可解释的吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 16:07:41

代码语言:txt
复制
response.FreeContentStream := true;

这就是解决办法。

我的职能:

代码语言:txt
复制
function TGetData.articleZippedImages(skip, take: Integer; since: string) : TStream;
代码语言:txt
复制
procedure TWebModule1.WebModuleAfterDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
   response.FreeContentStream := true;
   Response.Content := '';
   Response.CustomHeaders.Values['Content-Disposition'] := 'attachment; filename=test.zip';
   Response.SendResponse;
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档