delphi 10 如何跟踪 NetHttpClient 的上传进度?

How to Track the progress of the Upload by NetHttpClient in delphi 10?

现在我会通过delphi10中的Nethttpclient组件将文件发送到我的服务器,但是我不知道上传时如何跟踪进度。如果我下载文件,我可以通过事件ReceiveData获取进度。 没有任何其他有用的功能或事件可以做到这一点,请帮助我解决这个问题。(只有nethttpclient,因为我不使用Indy

TNetHTTPClient 除了 OnRequestComplete and OnRequestError 外,在上传过程中不会公开任何类型的状态信息。如果您需要有关上传数据进度的状态,您应该切换到另一个提供您想要的进度报告类型的 HTTP 库。

话虽这么说,我可以看到使用 TNetHTTPClient 获取上传状态的唯一方法是使用 TStream post 文件数据。从 TFileStream 派生自定义 class 并覆盖其 Read() 方法以读取文件数据并根据需要报告状态。

实际上(我使用 Delphi v. 10.4.1)TNetHttpClient 实现了一个名为 OnSendData 的 property/method 类似于 OnReciveData 以在上传期间管理 post 流:

property OnSendData: TSendDataEvent read FOnSendData write SetOnSendData;

基于在“System.Net.HttpClient.THTTPClient.Post”中声明为对象过程的 TSendDataEvent:

TSendDataEvent = procedure(const Sender: TObject; AContentLength: Int64; AWriteCount: Int64; var AAbort: Boolean) of object;

希望有用