Delphi:使用TidHTTPServer传输文件并监视单个请求的字节发送

时间:2014-11-06 19:50:51

标签: delphi indy idhttp

使用TIdHTTPServer(Indy 10.6),如何跟踪每个请求(在关闭连接时)向客户端(用户浏览器)发送了多少字节?

procedure onCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo;
begin
    AResponseInfo.ContentStream := TFileStream.Create('C:/HugeFile.zip', fmOpenRead or fmShareCompat);
    AResponseInfo.ContentLength := AResponseInfo.ContentStream.Size;
    AResponseInfo.WriteHeader;
    AResponseInfo.WriteContent;
    AResponseInfo.ContentStream.Free;
    AResponseInfo.ContentStream := nil;
end;

例如,在日志文件中:

2014-11-06 20:32:00 - IPAddress 84.XXX.XXX.XXX download 1000000 Bytes (100%)
2014-11-05 16:05:00 - IPAddress 72.XXX.XXX.XXX download 500000  Bytes (50%)

1 个答案:

答案 0 :(得分:3)

如果您只想在传输结束时输出一个日志,说明发送了多少字节,您可以从TFileStream派生一个新类并覆盖其析构函数以输出显示该流的当前{的日志消息{1}}相对于Position。无论您需要记录什么其他信息都可以传递给构造函数并保存,以便析构函数可以使用它。

例如:

Size