我需要一个数据NAP服务器中的函数,它返回一个.zip文件。所以我开始说:
function TGetData.getZip (): TFileStream;
begin
result := TFileStream.Create('test.zip', fmOpenRead and fmShareDenyWrite);
end
这很好,但是DataNAP并没有释放它,所以我得到了一个内存泄漏错误。
下一次尝试:我从“TWebModule1.WebModuleAfterDispatp”开始。我想用“Response.endResponse”来回应我的反应,然后自己释放我的小溪,这样会有帮助。下面是一个简短的版本:
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,但是似乎没有工作示例.
对这样的问题有什么可解释的吗?
发布于 2018-07-26 16:07:41
response.FreeContentStream := true;
这就是解决办法。
我的职能:
function TGetData.articleZippedImages(skip, take: Integer; since: string) : TStream;
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;
https://stackoverflow.com/questions/-100005810
复制相似问题