在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)沒有條目。 –