微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 使用INDY检测远程服务器上文件的Mime-Type

我一直在使用Synapse库从互联网上下载文件,但我最近将我的应用程序转换为使用INDY而我错过了Synapse库中的一个更好的功能,即能够轻松获取Mime类型的在将文件保存到本地计算机之前从服务器下载的文件. INDY是否具有此功能,如果有,我该如何访问它?

解决方法

您可以发出HTTP HEAD请求并检查Content-Type标头.在您实际获取文件(下载)之前:

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;

您收到的ContentType取决于Web服务器实现,并且不保证在每台服务器上都相同.

一个选择是实际获取文件并将其内容保存到内存流(如TMemoryStream(而不是本地文件)). Indy提供了一个过载:

Http.Get(Url,AStream);

然后检查Http.Response.ContentType,并将流保存到文件:AStream.SavetoFile.

不确定这里的相关性,但请注意Indy也可以返回/猜测本地文件的mime类型(给定文件扩展名).使用GetMIMETypeFromFile(使用IdGlobalProtocols).另见here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐