Согласование типов мультимедиа

Многие протоколы Интернета уровня приложений основаны на обмене сообщениями в простом гибком формате с именем Multipurpose Internet Mail Extensions (MIME). Хотя MIME был стандартом для обмена электронными сообщениями, он используется сегодня различными приложениями для указания форматов данных, понятных как MIME, или мультимедиа, типов. Процесс называется согласованием типа мультимедиа.

Типы мультимедиа — это простые строки, обозначающие тип и подтип (например, "text/plain" или "text/HTML"). Они используются для маркировки данных или квалификации запроса. Веб-браузер, например, в рамках HTTP-запроса для данных или запроса для сведений указывает, что он запрашивает "image/gif" или "image/jpeg", на который веб-сервер отвечает, возвращая соответствующий тип носителя, и, если вызов был запросом данных, сами данные в запрошенном формате.

Согласование типов мультимедиа часто похоже на то, как существующие классические приложения согласовывают с системным буфером обмена, чтобы определить формат данных, который нужно вставить, когда пользователь выбирает формат "Изменить или вставить" или запрашивает форматы при получении указателя IDataObject во время операции перетаскивания. Тонкое различие в согласовании типа мультимедиа HTTP заключается в том, что клиент не знает заранее, какие форматы доступны на сервере. Таким образом, клиент указывает внешний тип носителей, который он поддерживает, в порядке наибольшей точности, и сервер отвечает с лучшим доступным форматом.

Моникеры URL-адресов поддерживают согласование типов мультимедиа в качестве способа для интернет-клиентов и серверов, которые должны быть использованы при скачивании данных в операциях BindTo служба хранилища. Для поддержки согласования типов мультимедиа клиент реализует интерфейс IEnumFORMATETC и вызывает функцию RegisterFormatEnumerator, чтобы зарегистрировать ее в контексте привязки. Перечислитель формата перечисляет форматы, которые клиент может принять. Моникер URL-адреса преобразует эти форматы в типы носителей при привязке к URL-адресам HTTP.

Возможные типы носителей, запрашиваемые клиентом, представляются моникерам URL-адресов через структуры FORMATETC, доступные из перечислителя IEnumFORMATETC, зарегистрированного вызывающим объектом в контексте привязки: каждый FORMATETC указывает формат буфера обмена, определяющий тип носителя. Например, следующий фрагмент кода указывает, что тип носителя — PostScript.

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

Клиент может задать формат буфера обмена для специального типа мультимедиа CF_NULL, чтобы указать, что тип носителя по умолчанию, на который указывает URL-адрес, должен быть получен. Этот формат обычно является последним, в котором заинтересован клиент. Если перечислитель не зарегистрирован в контексте привязки, то моникер URL-адреса работает так, как если бы перечислитель, содержащий один FORMATETC с cfFormat=CF_NULL, доступен автоматически, скачивая тип носителя по умолчанию.

Какой бы тип носителя ни использовался, клиент уведомляется о выборе с помощью аргумента pformatetc в методе IBindStatusCallback::OnDataAvailable. Обратный вызов происходит в контексте вызова клиента BindTo служба хранилища.

Примечание.

Если полученное содержимое является нераспознанным типом мультимедиа, клиент автоматически вызывает RegisterMediaTypes для регистрации нового типа.

 

URL-моникеры