9

使用 indy TIdHTTPServer,即使在 OnCommandGet 上,也可以将带有数据的流传递给 AResponseInfo.ContentStream。这很好。我什么时候可以发布该流?假设服务器可以获得多个请求,并且任何请求都可以在给定时间处理,并且一个流可以完成另一个流。

在哪里可以释放流?

代码示例:

var
  StreamsToFree : TList;

//assume StreamsToFree := TList.create; properly 

procedure TObject.IdHttpServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
stream : TFileStream;
begin
  stream := TFileSTream.create('file.name');
  AResponseInfo.ContentStream := stream;
  AResponseInfo.ResponseNo := 200;
  StreamsToFree.Add(generateReceiptXML);  
end;

什么时候可以释放流?在什么情况下,我们如何知道 IdHttpServer 完成了它的传输?

4

1 回答 1

15

当您将其分配给该ContentStream属性时,Indy 将成为您的流的所有者,并在不再需要它时将其释放。

编辑:假设您将FreeContentStream属性设置为True(这是默认设置)。

于 2012-11-15T14:57:37.133 回答