如何在Delphi中获取MIME类型的标准文件扩展名?

时间:2017-07-06 11:36:07

标签: delphi mime-types file-extension delphi-xe7

是否有内置方法在Delphi(XE7)中获取给定MIME类型的标准扩展?

我正在寻找最简单,最通用的方法来实现一个像这样调用的函数:

fileExt := GetExtension('text/xml');

4 个答案:

答案 0 :(得分:4)

TIdThreadSafeMimeTable 上,Indy似乎有内置功能:

Uses
  IdCustomHTTPServer;


function GetMIMETypeDefaultExtension(const aMIMEType: String): String;
var
  mimetable: TIdThreadSafeMimeTable;
Begin
  if not(aMIMEType.Trim.IsEmpty) then
  Begin
    mimetable := TIdThreadSafeMimeTable.Create(true);
    try
      result := mimetable.GetDefaultFileExt(aMIMEType);
    finally
      mimetable.Free;
    end
  End
  else
      result := '';
End;
修复

编辑功能,直接使用TIdThreadSafeMimeTable,无需自定义http服务器。

答案 1 :(得分:4)

Indy的IndyProtocols软件包在TIdMimeTable单元中有一个GetMIMETypeFromFile()类和独立的GetMIMEDefaultFileExt()IdGlobalProtocols包装函数,例如:

uses
  ..., IdGlobalProtocols;

function GetExtension(const AMIMEType: string);
begin
  Result := GetMIMEDefaultFileExt(AMIMEType);
end

只需知道内部,GetMIMEDefaultFileExt()创建并销毁TIdMimeTable对象,并且该对象在每次创建时都会重新构建其已知扩展和MIME类型的列表。如果您要经常查询MIME扩展,那么值得创建自己的TIdMimeTable对象(如果需要跨多个线程共享表,则为TIdThreadSafeMimeTable),并且每次都重用它:

uses
  ..., IdGlobalProtocols;

var
  MimeTable: TIdMimeTable = nil;

function GetExtension(const AMIMEType: string);
begin
  if MimeTable = nil then
    MimeTable := TIdMimeTable.Create;
  Result := MimeTable.GetDefaultFileExt(AMIMEType);
end;

initialization
finalization
  MimeTable.Free;

uses
  ..., IdGlobalProtocols, IdCustomHTTPServer;

var
  MimeTable: TIdThreadSafeMimeTable = nil;

function GetExtension(const AMIMEType: string);
begin
  if MimeTable = nil then
    MimeTable := TIdThreadSafeMimeTable.Create;
  Result := MimeTable.GetDefaultFileExt(AMIMEType);
end;

initialization
finalization
  MimeTable.Free;

答案 2 :(得分:3)

HKEY_CLASSES_ROOT \ MIME \ Database \ Content Type \ text / html,value Extension。

答案 3 :(得分:0)

对于最新版本的Delphi,可以在单位TMimeTypes中使用System.Net.Mime

您可以使用两种方法为内部字典设定种子以执行查找。第一个AddDefTypes将添加标准类型,方法AddOSTypes将添加由主机OS定义的任何类型(对于Windows,它将进行注册表爬网)。如果您调用TMimeTypes.GetDefault,它将在首次调用(单例)时使用这两种方法构造一个TMimeTypes实例。