共用方式為


Media-Type 交涉

許多應用層因特網通訊協定是以簡單且靈活的格式交換訊息為基礎,稱為多用途因特網郵件延伸模組(MIME)。 雖然 MIME 起源於交換電子郵件訊息的標準,但目前由各種不同的應用程式使用,以將相互瞭解的數據格式指定為 MIME 或媒體類型。 此程式稱為 媒體類型交涉

媒體類型是代表類型和子類型的簡單字串(例如 “text/plain” 或 “text/HTML” )。 它們可用來標記數據或限定要求。 例如,網頁瀏覽器是 HTTP 要求 for-data 或 request-for-info 的一部分,指定它要求 “image/gif” 或 “image/jpeg” 媒體類型,網頁伺服器會傳回適當的媒體類型來響應該類型,如果呼叫是要求數據,則數據本身會以要求的格式。

媒體類型交涉通常類似於現有傳統型應用程式與系統剪貼簿交涉的方式,以決定當使用者在拖放作業期間收到 IDataObject 指標時,選擇 [編輯/貼上] 或查詢格式時要貼上的數據格式。 HTTP 媒體類型交涉的細微差異在於用戶端事先不知道伺服器可用的格式。 因此,用戶端會依最逼真度的順序,指定其支援的媒體類型,而伺服器會以最佳可用格式回應。

URL Monikers 支援媒體類型交涉,以讓因特網用戶端和伺服器同意在 BindToStorage 作業中下載數據時要使用的格式。 為了支持媒體類型交涉,用戶端會實作 IEnumFORMATETC 介面,並呼叫 RegisterFormatEnumerator 函式來向系結內容註冊。 格式列舉值會列出用戶端可接受的格式。 當系結至 HTTP URL 時,URL Moniker 會將這些格式轉譯為媒體類型。

用戶端所要求的可能媒體類型會透過 FORMATETC 結構,以對 URL Moniker 表示,IEnumFORMATETC 系結內容上呼叫者所註冊的列舉值:每個 FORMATETC 會指定識別媒體類型的剪貼簿格式。 例如,下列代碼段會指定媒體類型為 PostScript。

FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .

用戶端可以將剪貼簿格式設定為特殊媒體類型CF_NULL,以指出應該擷取 URL 所指向之資源的預設媒體類型。 此格式通常是用戶端感興趣的最後一個格式。 未向系結內容註冊任何列舉值時,URL Moniker 的運作方式就像是包含單一 FORMATETC 的列舉值cfFormat=CF_NULL可用,自動下載默認媒體類型。

無論使用何種媒體類型,用戶端都會透過其 IBindStatusCallback::OnDataAvailable 方法上的 pformatetc 自變數來通知選擇。 回呼發生在用戶端呼叫 BindToStorage的內容中。

注意

如果收到的內容是無法辨識的媒體類型,用戶端會自動呼叫 RegisterMediaTypes 註冊新的類型。

 

URL Monikers