我一直在使用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 举报,一经查实,本站将立刻删除。