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.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...