-1
我需要一個datasnap-server中的函數,它返回一個.zip文件。 於是我開始用:使用TFileStream作爲返回值的Delphi Datasnap服務器內存泄漏
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-server支持TFileStream。相反,我應該使用TDBXStreamValue,但似乎沒有工作的例子...
有任何一個expirience與這樣的問題?
在文件末尾寫了什麼HTML? –
請參閱[DataSnap服務器方法流參數](http://community.embarcadero.com/blogs/entry/datasnap-server-method-stream-parameters-31461)。 –
html部分包含響應信息,如reposnse代碼(在示例200中),內容類型等。 – ChessDev