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

如何在delphi 10中跟踪NetHttpClient上传的进度?,delphi,httpclient,progress,Delphi,Httpclient,Progress,现在我将通过Delphi10中的Nethttpclient组件将文件发送到我的服务器,但我不知道上传时如何跟踪进度。如果我下载文件,我可以通过事件ReceiveData获得进度。 没有任何其他有用的函数或事件可以执行此操作,请帮助我解决此问题。(只有nethttpclient,因为我不使用Indy)TNetHTTPClient在上载过程中不公开任何类型的状态信息,除了和。如果需要上载数据的进度状态,则应切换到另一个提供所需进度报告类型的HTTP库 也就是说,我能看到的使用TNetHTTPClie

现在我将通过Delphi10中的
Nethttpclient
组件将文件发送到我的服务器,但我不知道上传时如何跟踪进度。如果我下载文件,我可以通过事件
ReceiveData
获得进度。
没有任何其他有用的函数或事件可以执行此操作,请帮助我解决此问题。(只有
nethttpclient
,因为我不使用
Indy

TNetHTTPClient
在上载过程中不公开任何类型的状态信息,除了和。如果需要上载数据的进度状态,则应切换到另一个提供所需进度报告类型的HTTP库


也就是说,我能看到的使用
TNetHTTPClient
获取上载状态的唯一方法是使用
TStream
发布文件数据。从
TFileStream
派生自定义类,并根据需要重写其
Read()
方法以读取文件数据和报告状态

TNetHTTPClient
在上传过程中不公开任何类型的状态信息,除了和。如果需要上载数据的进度状态,则应切换到另一个提供所需进度报告类型的HTTP库

也就是说,我能看到的使用
TNetHTTPClient
获取上载状态的唯一方法是使用
TStream
发布文件数据。从
TFileStream
派生自定义类,并根据需要重写其
Read()
方法以读取文件数据和报告状态

实际上(我使用Delphi v.10.4.1),TNetHttpClient实现了一个名为OnSendData的属性/方法,类似于OnReceiveData,用于在上传过程中管理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;
希望它是有用的

实际上(我使用Delphi v.10.4.1)TNetHttpClient实现了一个名为OnSendData的属性/方法,类似于OnReceiveData,用于在上载过程中管理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;

希望它有用

什么?另一个HTTP组件?接口编程的另一个很好的理由。如果您只创建并使用实现的接口对象,那么切换到Indy或其他可以报告进度的库或组件将不会有问题。是的,但我的所有代码都基于NetHttpClient只是一个细节,没有Xe10这样的版本什么?另一个HTTP组件?接口编程的另一个很好的理由。如果您只创建和使用实现的接口对象,那么切换到Indy或其他可以报告进度的库或组件就没有问题了。是的,但我所有的代码都基于NetHttpClient只是一个细节问题,没有Xe10这样的版本如何做,请给我一些提示信息,我试着修改它。@HenryXu:你要的东西太宽了,不适合我。有许多HTTP库可用,其中许多都有进度报告。只需选择一个适合您需要的代码并更改代码即可使用它。你为什么不想用印地?它预先安装在RAD Studio中,其HTTP组件具有发送和接收的进度事件。是的,它们具有indy、ics、cis等进度事件。一个原因是,我不喜欢使用很多第三方组件,另一个原因是,我拥有的组件和我的应用程序的所有代码都基于nethttpclient。我不希望我更改组件以获得一个功能。而且Tnethttpclient可以支持ssl和ipv6(内置功能),因此需要使用
openssl
这对windows来说不是问题,但对OSX来说是如何做到的,请给我一些提示信息,我试着修改它。@HenryXu:你要的东西太宽了,不适合我。有许多HTTP库可用,其中许多都有进度报告。只需选择一个适合您需要的代码并更改代码即可使用它。你为什么不想用印地?它预先安装在RAD Studio中,其HTTP组件具有发送和接收的进度事件。是的,它们具有indy、ics、cis等进度事件。一个原因是,我不喜欢使用很多第三方组件,另一个原因是,我拥有的组件和我的应用程序的所有代码都基于nethttpclient。我不希望我更改组件以获得一个功能。Tnethttpclient可以支持ssl和ipv6(内置功能),因此需要使用
openssl
这对windows不是问题,但对OSX是问题