我一直在使用 Synapse 库从互联网下载文件,但我最近将我的应用程序转换为使用 INDY,并且我缺少 Synapse 库中更好的功能之一,即能够轻松获取我在将其保存到本地计算机之前从服务器下载的文件。 INDY 是否具有此功能?如果有,我该如何访问它?
您可以发出 HTTPHEAD
请求并检查Content-Type
标头。在你真正之前GET
文件(下载):
procedure TForm1.Button1Click(Sender: TObject);
var
Url: string;
Http: TIdHTTP;
begin
Url := 'http://yoursite.com/yourfile.png';
Http := TIdHTTP.Create(nil);
try
Http.Head(Url);
ShowMessage(Http.Response.ContentType); // "image/png"
finally
Http.Free;
end;
end;
The ContentType
您收到的回复取决于网络服务器的实现,并且不能保证每台服务器上的回复都相同。
另一种选择是实际上GET
文件并将其内容保存到内存流中,例如TMemoryStream
(不是本地文件)。 Indy 提供了一个重载:
Http.Get(Url, AStream);
然后你检查Http.Response.ContentType
,并将流保存到文件:AStream.SaveToFile
.
不确定这里的相关性,但还要注意,Indy 也可以返回/猜测本地文件的 mime 类型(给定文件扩展名)。和GetMIMETypeFromFile
(uses IdGlobalProtocols
)。也可以看看here https://stackoverflow.com/questions/9856265/any-way-to-guess-the-mime-type-on-delphi-xe2.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)