在Delphi(XE7)中是否有一种内置方式可以获得给定MIME类型的标准扩展?如何在Delphi中获得MIME类型的标准文件扩展名?
我在寻找实施,将这样调用函数的最简单和最常用的方法:
fileExt := GetExtension('text/xml');
在Delphi(XE7)中是否有一种内置方式可以获得给定MIME类型的标准扩展?如何在Delphi中获得MIME类型的标准文件扩展名?
我在寻找实施,将这样调用函数的最简单和最常用的方法:
fileExt := GetExtension('text/xml');
HKEY_CLASSES_ROOT \ MIME \数据库\内容类型\ text/html的,价值延伸。
谢谢,就是这样! –
当然有一个API或一些标准的封装方法。没有文档说这是稳定的,它看起来像脆弱的注册表黑客攻击。 –
@DavidHeffernan Indy也使用这个注册表键,所以我们可以认为这是“官方”的方式。 –
似乎印有一个内置的功能是,在TIdThreadSafeMimeTable:
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服务器。
您也可以直接在同一单元中使用* TIdThreadSafeMimeTable *(无需创建服务器) – mjn42
将anser更改为使用该类,如您所建议的那样。 –
'TIdThreadSafeMimeTable'旨在与'TIdHTTPServer'一起使用,因为它是一个多线程服务器,其工作线程经常需要访问缓存的MIME信息。在IdGlobalProtocols中有一个非线程安全的TIdMimeTable,它也有独立的GetMIMETypeFromFile()和GetMIMEDefaultFileExt()函数(它们在内部使用TIdMimeTable)。在上面的示例中,由于每次调用时都会创建和销毁表,所以使用'TIdThreadSafeMimeTable'会有些过度,只需使用'TIdMimeTable'或者甚至是'GetMIMEDefaultFileExt()'。 –
Indy的IndyProtocols
封装具有TIdMimeTable
类和独立GetMIMETypeFromFile()
和GetMIMEDefaultFileExt()
包装函数在IdGlobalProtocols
单位,例如:
uses
..., IdGlobalProtocols;
function GetExtension(const AMIMEType: string);
begin
Result := GetMIMEDefaultFileExt(AMIMEType);
end
只知道在内部,GetMIMEDefaultFileExt()
创建和销毁TIdMimeTable
对象,该对象再每次创建时都会生成已知扩展名和MIME类型的列表。
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;
:如果你要经常查询MIME扩展,(如果你需要共享在多个线程表或
TIdThreadSafeMimeTable
),每次重复使用它这将是值得创建自己的
TIdMimeTable
对象
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;
不是我所知道的,而是一个快速谷歌发现这个:https://www.thoughtco.com/file-extensions-and-mime-types-3469109 –
谢谢你的链接,但我希望有一个系统函数,因为MIME类型的集合随着时间而改变。例如,在您链接的表中,docx(application/vnd.openxmlformats-officedocument.wordprocessingml.document)没有条目。 –