Mime типы файлов

Развитие технологии и её появление

Типы MIME активно используются для передачи данных в HTTP-протоколе. Говоря простым языком, он описывает дополнительные атрибуты пересылаемого пакета и поддерживает возможность реализовать передачу нескольких файлов, даже вложенных друг в друга в рамках одного сообщения. Для того чтобы сообщить адресату о том, какой тип файла передаётся, и, соответственно, как с ним работать, в заголовке добавляется его MIME-тип. Например, обычный текст маркируется text/plain, а электронные страницы — text/html.

Зачем нужно знать о MIME?

О том, как устроены и для чего нужны типы MIME, необходимо знать веб-разработчикам и программистам, в чьи обязанности входит создание продуктов, так или иначе работающих с Сетью. Описать взаимодействие лучше на приближенном к реальности примере.

Веб-программист пишет код для одной из страниц сайта. Он позволяет выполнить загрузку файла PDF. При этом в коде он указывает MIME для такого типа данных: application/pdf. Браузер, обращаясь к этой странице, читает заголовок и понимает, что это PDF-файл. И в зависимости от настроек либо сразу начинает его скачивать, либо просто откроет для просмотра в окне. Таким образом, разделение контента на типы позволяет клиенту адекватно реагировать на поступающие типы данных соответствующим способом.

Список MIME-типов


Количество разновидностей файлов, перечисленных в стандарте MIME, велико. Для удобства все они разбиты по категориям. Стоит рассмотреть основные из них и описать типы, а также то, как браузер будет на них реагировать.

Категория text

В ней находятся типы, которые, так или иначе, связаны с передачей текстовой информации. Сюда могут входить скрипты, таблицы стилей, обыкновенный текст. В категорию входят:

  • Html. Язык гипертекстовой разметки. Ни один сайт в Интернете не сможет работать без его использования.
  • Css. Каскадные таблицы стилей. Оформление и взаимодействие объектов на странице осуществляется с помощью таких файлов.
  • Javascript. Увидев этот тип, браузер сразу поймёт, что ему нужно обработать участок кода — скрипт.
  • Plain. Простой обычный текст.
  • Xml. Файлы разметки по технологии XML.

Категория image

Здесь передаются расширения пересылаемых файлов, например таких:

  • gif;
  • jpeg;
  • tiff.

Категория application

Содержит в себе типы, которые можно, так или иначе, запустить, то есть данные каких-то приложений или сервисов. Реакция браузера на некоторые из них может быть запросом на запуск специальной программы или же открытие ее прямо на странице.


  • Json. Удобный формат передачи данных. Сообщает браузеру о том, что ответ будет передан в json.
  • Pdf. В зависимости от настроек браузера данный тип может скачиваться, просматриваться в окне или же использовать стороннюю программу, установленную на компьютере.
  • Zip и gzip. Передача архивных файлов.
  • Ogg. Обозначение для мультимедиа контента.
  • Xhtml+xml. Формат передачи данных XHTML, который дополняет и увеличивает функционал классического HTML, а также привносит эффективность XML в стандарт.

Категория audio

По аналогии с графическими файлами в этой категории передаются в основном расширения:

  • Basic. Стандартный тип звукового файла.
  • Aac. Формат аудиофайла.
  • Mpeg. Здесь может передаваться mp3 или mpeg.
  • X-ms-wma или x-ms-wax. Тип данных Windows Media Audio.
  • Webm. Довольно молодой формат видео, разработанный компанией Google. Уже поддерживается многими браузерами и медиаплеерами.

X

X-типы относятся к категории application. С помощью них обозначаются нестандартные типы файлов. К ним, например, относятся архивы tar, RAR, FLASH и многие другие, не вошедшие в основной перечень.

Заключение

Список MIME type постоянно расширяется в связи с появлением новых технологий, стандартов и типов файлов. Ознакомиться с текущим перечнем можно в последних обновлениях документов RFC, касающихся типов MIME.

fb.ru

Синтаксис


Общая структура

type/subtype

Структура типа MIME очень проста; он состоит из типа и подтипа, двух строк, разделенных символом '/' . Пространство не допускается. Тип представляет категорию и может быть дискретным или многочастным . Подтип специфичен для каждого типа.

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

Дискретные типы

text/plain text/html image/jpeg image/png audio/mpeg audio/ogg audio/* video/mp4 application/* application/json application/javascript application/ecmascript application/octet-stream …

Дискретные типы указывают категорию документа, это может быть одно из следующего:

Для текстовых документов без определенного подтипа следует использовать text/plain . Аналогично, для двоичных документов без определенного или известного подтипа следует использовать application/octet-stream .

Многостраничные типы

multipart/form-data multipart/byteranges

Многостраничные типы указывают категорию документа, которые разбиты на отдельные части, часто с разными типами MIME. Это способ представления составного документа. За исключением данных multipart/form-data
, которые используются в отношении HTML-форм и метода POST , а также multipart/byteranges , которые используются вместе с сообщением о статусе 206 Partial Content для отправки только подмножества целого документа, HTTP doesn ‘ t обрабатывать многостраничные документы определенным образом: сообщение просто передается в браузер (который, скорее всего, предложит окно «Сохранить как», не зная, как отобразить документ в строке.)

Важные типы MIME для веб-разработчиков

application/octet-stream

Это значение по умолчанию для двоичного файла. Поскольку это действительно означает неизвестный двоичный файл, браузеры обычно не выполняют его автоматически или даже спрашивают, следует ли его выполнять. Они рассматривают его так, как будто заголовок Content-Disposition был установлен с attachment значения и предлагает файл «Сохранить как».

text/plain

Это значение по умолчанию для текстовых файлов. Даже если это действительно означает неизвестный текстовый файл, браузеры предполагают, что могут отображать его.

text/css

Любые файлы CSS, которые должны интерпретироваться как таковые на веб-странице, должны быть из файлов text/css . Часто серверы не распознают файлы с .css как файлы CSS, вместо этого отправляют их с типом MIME типа text/plain или application/octet-stream : в этих случаях они не будут распознаваться как файлы CSS большинством браузеров и будут быть молча игнорируемым. Особое внимание должно быть уделено обслуживанию файлов CSS с правильным типом.

text/html

Все содержимое HTML должно быть подано с этим типом. Альтернативные типы MIME для XHTML (например, application/xml+html) в наши дни бесполезны (HTML5 унифицирует эти форматы).

Типы изображений

Только несколько типов изображений широко признаны и считаются безопасными в Интернете, готовыми к использованию на веб-странице:

Существует обсуждение добавления WebP ( image/webp ) в этот список, но поскольку каждый новый тип изображения увеличивает размер кодовой базы, это может привести к новым проблемам безопасности, поэтому поставщики браузеров с осторожностью принимают его.

Другие виды изображений можно найти в веб-документах. Например, многие браузеры поддерживают типы изображений значков для значков или аналогичных. В частности, изображения ICO поддерживаются в этом контексте с помощью типа MIME image/x-icon
.

Типы аудио и видео

Подобно изображениям, HTML не определяет набор поддерживаемых типов для использования с элементами <audio> и <video> , поэтому только небольшая группа из них может использоваться в Интернете. Форматы мультимедиа, поддерживаемые аудио и видео элементами HTML, объясняют как кодеки, так и форматы контейнеров, которые можно использовать.

Тип MIME таких файлов в основном представляет собой форматы контейнеров, а наиболее распространенными из них являются веб-контекст:

multipart/form-data

Тип multipart/form-data может использоваться при отправке содержимого заполненной HTML-формы из браузера на сервер. В качестве формата многостраничного документа он состоит из разных частей, разделенных границей (строка, начинающаяся с двойной тире '--' ). Каждая часть является сущностью сама по себе, со своими собственными HTTP-заголовками, Content-Disposition и Content-Type для полей загрузки файлов и наиболее распространенными ( Content-Length игнорируется, поскольку граничная линия используется как разделитель).

Content-Type: multipart/form-data; boundary=aBoundaryString (other headers associated with the multipart document as a whole)  --aBoundaryString Content-Disposition: form-data; name="myFile"; filename="img.jpg" Content-Type: image/jpeg  (data) --aBoundaryString Content-Disposition: form-data; name="myField"  (data) --aBoundaryString (more subparts) --aBoundaryString--  

Следующая форма:


<form action="http://localhost:8000/" method="post" enctype="multipart/form-data">  <input type="text" name="myTextField">  <input type="checkbox" name="myCheckBox">Check</input>  <input type="file" name="myFile">  <button>Send the file</button> </form>

отправит это сообщение:

POST / HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498 Content-Length: 465  -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myTextField"  Test -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myCheckBox"  on -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myFile"; filename="test.txt" Content-Type: text/plain  Simple file. -----------------------------8721656041911415653955004498--  

multipart/byteranges

Тип MIME multipart/byteranges используется в контексте отправки частичных ответов обратно в браузер. Когда отправляется код состояния 206 Partial Content , этот тип MIME используется для указания того, что документ состоит из нескольких частей, по одному для каждого из запрошенных диапазонов. Как и другие типы multipart, Content-Type использует директиву boundary для определения граничной строки. Каждая из разных частей имеет заголовок Content-Type с фактическим типом документа и Content-Range с диапазоном, который они представляют.

HTTP/1.1 206 Partial Content Accept-Ranges: bytes Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 Content-Length: 385  --3d6b6a416f9b5 Content-Type: text/html Content-Range: bytes 100-200/1270  eta http-equiv="Content-type" content="text/html; charset=utf-8" />  <meta name="vieport" content --3d6b6a416f9b5 Content-Type: text/html Content-Range: bytes 300-400/1270  -color: #f0f0f2;  margin: 0;  padding: 0;  font-family: "Open Sans", "Helvetica --3d6b6a416f9b5--

Важность установки правильного типа MIME

Большинство веб-серверов отправляют ресурсы неизвестного типа с использованием типа MIME application/octet-stream . По соображениям безопасности большинство браузеров не позволяют настраивать действие по умолчанию для таких ресурсов, заставляя пользователя хранить его на диске для его использования. Часто встречающиеся неправильные конфигурации серверов происходят со следующими типами файлов:


  • RAR-кодированные файлы. В этом случае идеальным было бы установить истинный тип закодированных файлов; это часто невозможно (так как это может быть неизвестно серверу, и эти файлы могут содержать несколько ресурсов разных типов). В этом случае, настроив сервер для отправки MIME-типа application/x-rar-compressed , пользователи не будут определять для них полезное действие по умолчанию.

  • Аудио и видео файлы. Только ресурсы с правильным типом MIME будут распознаваться и воспроизводиться в элементах <video> или <audio> . Обязательно используйте правильный тип для аудио и видео .

  • Собственные типы файлов. Обратите особое внимание при обслуживании типа файла. Избегайте использования application/octet-stream поскольку специальная обработка не будет возможна: большинство браузеров не позволяют определять поведение по умолчанию (например, «Открытие в Word») для этого общего типа MIME.

MIME sniffing

В отсутствие типа MIME или в некоторых других случаях, когда клиент полагает, что они неправильно установлены, браузеры могут выполнять MIME-обнюхивание, которое угадывает правильный тип MIME, просматривая ресурс. Каждый браузер выполняет это по-разному и при разных обстоятельствах. В этой практике есть некоторые проблемы с безопасностью, так как некоторые типы MIME представляют собой исполняемый контент, а другие нет. Серверы могут блокировать прослушивание MIME, отправив X-Content-Type-Options
вдоль Content-Type .

Другие способы передачи типа документа

Типы MIME не являются единственным способом передачи информации о типе документа:

  • Иногда используются суффиксы имен, особенно в системах Microsoft Windows. Не все операционные системы считают эти суффиксы значимыми (особенно Linux и Mac OS) и, как внешний MIME-тип, не гарантируют, что они верны.
  • Магические числа. Синтаксис файлов разных типов позволяет выводить тип файла, просматривая структуру. Например, каждый файл GIF начинается с шестнадцатеричного значения 47 49 46 38 [GIF89] или PNG файлов с 89 50 4E 47 [.PNG]. Не все типы файлов имеют магические числа, поэтому это не 100% надежная система.

code-examples.net

Наверняка у многих более-менее опытных пользователей Интернета возникал вопрос: "А как браузер узнает, какие документы надо показывать как html, какие как текст, а какие как графику, и как сделать так, чтобы определенные документы браузер не показывал сразу, а выдавал меню, позволяющее сохранить файл на диск?".

 

Для этого применяются так называемые MIME types. Каждому типу данных, которые обрабатываются веб-сервером, можно задать определенный тип, в том числе и через .htaccess настройку. Этот тип описывается набором символов, отражающим тип используемых данных.

Таблица типов наиболее часто используемых видов данных:

 Описание данных

Расширение файлов

MIME type

Картинки gif

gif

image/gif

Картинки jpeg

jpeg jpg jpe

image/jpeg

VRML-файлы

wrl vrml

model/vrml

HTML-документ

html htm

text/html

Обычный текст

asc txt

text/plain

Архив ZIP

zip

application/zip

Файл MS Word

doc

application/msword

Файл MS Excel

xls

application/vnd.ms-excel

Файл MS Power Point

ppt

application/vnd.ms-powerpoint

Файл Adobe Acrobat

pdf

application/pdf

Flash-документ

swf

application/x-shockwave-flash

Работает это так: веб-сервер знает, что, например, файлам с расширением .html соответствует тип text/html. В ответ на пришедший запрос html-файла сервер среди прочих http-заголовков возвращает поле Content-type, в котором и указывается тип данных для текущего документа. Пример :

Браузер, получив такой заголовок, знает, что документ с типом данных text/html это не что иное, как обычная веб-страница на языке HTML. Зная это, браузер обрабатывает принятый документ как HTML и показывает его пользователю именно с учетом этого. А вот если бы тип данных был, например, application/zip, браузер понял бы, что это ZIP-архив, который пользователю нужно предложить сохранить на диск.

Браузеры знают о том, каким образом нужно обрабатывать конкретные типы данных. Естественно, набор типов данных, известный браузерам, ограничен. Обусловлено это тем, что со временем появляются все новые и новые приложения для интернета, которые зачастую работают с новыми типами данных, которых раньше просто не существовало. Например, еще несколько лет назад не было типа audio/mpeg, которому соответствуют музыкальные файлы в формате mp3. Появился новый тип и в более поздних версиях браузеров он по умолчанию известен.

Кстати, добавить новый тип в браузер можно и вручную. Когда-то давно у меня возникли проблемы с rar настройкой в Опере, т.е. файлы — архивы .rar вместо того что бы скачиваться и сохраняться, делали все в браузере все что угодно, кроме данной стандартной как мне казалось операции. В общем, много пришлось пересмотреть материала : -).

Т.е. для rar-файла апач выдает content-type: text/plain: RAR — нестандарт, и за пределами рунета практически не используется. Но использовать .zip часто для меня непозволительная роскошь, так как размеры архивов увеличатся в таком случае чуть ли не в 3 раза… А апач поступает совершенно правильно, отдавая его как plaintext, так как ничего о нем не знает.

Поведение Оперы так же соответствует стандартам, и то, что в IE происходит иначе, это изврат и нарушение стандартов, например, если сервер выдает htlm-файл с content-type:text/plain, то Опера вместо страницы покажет исходник (т.е. текст), однако IE показывает страницу нормально…»

Самое действенное и одновременно неудобное:

  1. в браузере — прав-клац на ссылке -> Save target as — дождаться завершения загрузки, потом сохранить страницу с расширением rar (работает, особенно актуально, когда такая загрузка произошла из Интернета);

  2. в браузере — настройки -> типы файлов -> убрать галку с «скрыть типы файлов …» -> выбрать text/plain — txt и в свойствах этого типа файлов выбрать «показать диалог загрузки» — что бывает часто неудобно и НЕБЕЗОПАСНО;

  3. в браузере — настройки -> File Types -> убрать птичку с «Hide file types…» — выбрать ZIP -> в поле File Extension, поставить запятую и добавить RAR (без пробела — «zip,rar») — удобно, но срабатывает не во всех случаях.

Существует установленный набор типов данных, который описывает большинство используемых в интернете форматов. Вообще же MIME расшифровывается как Multipurpose Internet Mail Extensions — стандарт для определения типа передаваемой информации и механизмов ее обработки. Получить его можно на странице
http://www.iana.org/assignments/media-types/

Объем информации: 8547 bytes

www.htaccess.net.ru

Привет, хабр!

Недавно задался вопросом а сколько байт необходимо для корректного определения mime типа файла. В первую очередь погуглив, полученными ответами не удовлетворился и поэтому решил сам провести маленькое исследование на эту тему.

На изучение данного вопроса меня натолкнула следующая задача: определение MIME-типа файла, находящегося на smb-сервере. Лучшее, что я придумал — копировать кусок файла на локальную машину и потом, по этой части пытаться распознать его MIME-тип.

Mime типы файлов

Для начала расскажу, что я нагуглил и почему мне это не понравилось:

Stack Overflow дает 2 ссылки на википедию:

  1. File Signature говорит, что в большинстве случаев достаточно 2-4 байтов. Однако к сожалению это не так, например, для такого популярного формата, как pdf.
  2. List of signatures приводит некоторый список подписей для файлов разных форматов, но он далеко не полный. Потом нашел File Signatures, здесь вроде как все.
    Однако вернемся все к тому же pdf. Если верить этим источника, то для определения того, что файл является pdf достаточно четырех байт (0x25 0x50 0x44 0x46), однако исходя из первых четырех байтов libmagic говорил, что MIME-тип pdf-файла — text/plain, а из пяти — верное application/pdf. Затрудняюсь точно ответить с чем это связано, надо смотреть исходники.

Теперь давайте перейдем, собственно говоря, к тому, что сделал я. Я написал очень маленькую программку, которая считывала все файлы из одной директории, копировала первые N байт в другую директорию, а затем по частичным копиям полученных файлов пыталась определить, а что это собственно говоря такое было. И так до тех пор, пока MIME-тип части файла не совпадет с MIME-типом оригинала. По результатам работы программа рапортовала, сколько байт понадобилось для определения того или иного типа. Вот ее код:

#include <stdio.h> #include <stdlib.h> #include <magic.h> #include <sys/types.h> #include <dirent.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>  #define TEST_DIR "test-dir/" #define TMP_DIR "tmp-dir/"  magic_t cookie;  // Detects how many bytes required for correct MIME-type of this file void detect_size(char *filename) {  int bytes = 1;  int infd, outfd;  char strin[100], strout[100], type[100];  char buf[4096];   strcpy(strin, TEST_DIR);  strcat(strin, filename);   strcpy(strout, TMP_DIR);  strcat(strout, filename);   while(1) {  // Make a copy of given file  infd = open(strin, O_RDONLY);  outfd = open(strout, O_RDWR | O_CREAT, 00666);  read(infd, &buf, bytes);  write(outfd, &buf, bytes);  lseek(infd, 0, SEEK_SET);  lseek(outfd, 0, SEEK_SET);   // Detect mime types of old and new   const char *mime_type = magic_descriptor(cookie, infd);  strcpy(type, mime_type);  mime_type = magic_descriptor(cookie, outfd);   // Check if mime type detected correctly  if (strcmp(mime_type, type) == 0) {  printf("%s detected correctly in %d bytesn", type, bytes);  unlink(strout);  return;  }   unlink(strout);  bytes++;  } }  int main() {  DIR *dirfd = opendir(TEST_DIR);  struct dirent entry, *result = NULL;   cookie = magic_open(MAGIC_MIME_TYPE | MAGIC_ERROR);  magic_load(cookie, NULL);   while(1) {  readdir_r(dirfd, &entry, &result);   if (result == NULL)  break; // No more entries in this directory   if (!strcmp(entry.d_name, ".") || !strcmp(entry.d_name, ".."))  continue; // Ignore "." and ".."   detect_size(entry.d_name);  }   magic_close(cookie);  closedir(dirfd);  exit(EXIT_SUCCESS); } 

Потом накидав кучку разных файлов в папку test-dir я начал экспериментировать. Конечно то, что я сделал ни как не тянет на полномасштабное и серьезное исследование, но некоторые результаты все таки интересны. Приведи их краткую сводку:

application/x-sharedlib detected correctly in 18 bytes
application/msword detected correctly in 1793 bytes
image/gif detected correctly in 4 bytes
application/zip detected correctly in 4 bytes
application/x-dosexec detected correctly in 2 bytes
application/vnd.oasis.opendocument.presentation detected correctly in 85 bytes
text/html detected correctly in 14 bytes
image/jpeg detected correctly in 2 bytes
application/x-executable detected correctly in 18 bytes
text/x-makefile detected correctly in 1594 bytes
application/x-executable detected correctly in 18 bytes
application/x-gzip detected correctly in 2 bytes
audio/mpeg detected correctly in 2291 bytes
text/x-c detected correctly in 27 bytes
audio/x-flac detected correctly in 4 bytes
application/pdf detected correctly in 5 bytes

Отмечу некоторые вещи, которые мне показались интересными:

  • Ну во-первых, конечно уже упомянутый pdf, который распознается в 5 байт, а не в 4, как вроде бы следовало ожидать.
  • И напоследок хочется отметить, что не смотря на всю крутость идеи определять тип файла по первым N байтам она, на мой взгляд, провалилась.

Ну это пожалуй все, что я хотел рассказать в этот раз, не люблю много писать. Надеюсь, что это статья окажется кому-нибудь интересной.
Спасибо за внимание.

habr.com

www.master-sv.com

System.Web.MimeMapping имеет 3 версии — две версии 4.0 (где один из них является внутренним), а затем версия 2.0, которая также является внутренней. Как указано, в версии System.Web версии 4.0 для платформы .NET 4.5 существует общедоступная версия класса.

Для RoadkillWiki я в основном обратил внимание на это, чтобы сохранить беспокойство отражения каждый раз, обработчик файла Wiki по умолчанию пытается использовать IIS/applicationhost.config, а затем переходит в класс MimeMapping:

private string GetMimeType(string fileExtension, ServerManager serverManager) {  try  {  string mimeType = "text/plain";   Microsoft.Web.Administration.Configuration config = serverManager.GetApplicationHostConfiguration();  ConfigurationSection staticContentSection = config.GetSection("system.webServer/staticContent");  ConfigurationElementCollection mimemaps = staticContentSection.GetCollection();   ConfigurationElement element = mimemaps.FirstOrDefault(m => m.Attributes["fileExtension"].Value.ToString() == fileExtension);   if (element != null)  mimeType = element.Attributes["mimeType"].Value.ToString();   return mimeType;  }  catch (UnauthorizedAccessException)  {  // Shared hosting won't have access to the applicationhost.config file  return MimeMapping.GetMimeMapping("." +fileExtension);  } } 

И MimeMapping:

public class MimeMapping {  private static Dictionary<string, string> ExtensionMap = new Dictionary<string, string>();   static MimeMapping()  {  ExtensionMap.Add(".323", "text/h323");  ExtensionMap.Add(".asx", "video/x-ms-asf");  ExtensionMap.Add(".acx", "application/internet-property-stream");  ExtensionMap.Add(".ai", "application/postscript");  ExtensionMap.Add(".aif", "audio/x-aiff");  ExtensionMap.Add(".aiff", "audio/aiff");  ExtensionMap.Add(".axs", "application/olescript");  ExtensionMap.Add(".aifc", "audio/aiff");  ExtensionMap.Add(".asr", "video/x-ms-asf");  ExtensionMap.Add(".avi", "video/x-msvideo");  ExtensionMap.Add(".asf", "video/x-ms-asf");  ExtensionMap.Add(".au", "audio/basic");  ExtensionMap.Add(".application", "application/x-ms-application");  ExtensionMap.Add(".bin", "application/octet-stream");  ExtensionMap.Add(".bas", "text/plain");  ExtensionMap.Add(".bcpio", "application/x-bcpio");  ExtensionMap.Add(".bmp", "image/bmp");  ExtensionMap.Add(".cdf", "application/x-cdf");  ExtensionMap.Add(".cat", "application/vndms-pkiseccat");  ExtensionMap.Add(".crt", "application/x-x509-ca-cert");  ExtensionMap.Add(".c", "text/plain");  ExtensionMap.Add(".css", "text/css");  ExtensionMap.Add(".cer", "application/x-x509-ca-cert");  ExtensionMap.Add(".crl", "application/pkix-crl");  ExtensionMap.Add(".cmx", "image/x-cmx");  ExtensionMap.Add(".csh", "application/x-csh");  ExtensionMap.Add(".cod", "image/cis-cod");  ExtensionMap.Add(".cpio", "application/x-cpio");  ExtensionMap.Add(".clp", "application/x-msclip");  ExtensionMap.Add(".crd", "application/x-mscardfile");  ExtensionMap.Add(".deploy", "application/octet-stream");  ExtensionMap.Add(".dll", "application/x-msdownload");  ExtensionMap.Add(".dot", "application/msword");  ExtensionMap.Add(".doc", "application/msword");  ExtensionMap.Add(".dvi", "application/x-dvi");  ExtensionMap.Add(".dir", "application/x-director");  ExtensionMap.Add(".dxr", "application/x-director");  ExtensionMap.Add(".der", "application/x-x509-ca-cert");  ExtensionMap.Add(".dib", "image/bmp");  ExtensionMap.Add(".dcr", "application/x-director");  ExtensionMap.Add(".disco", "text/xml");  ExtensionMap.Add(".exe", "application/octet-stream");  ExtensionMap.Add(".etx", "text/x-setext");  ExtensionMap.Add(".evy", "application/envoy");  ExtensionMap.Add(".eml", "message/rfc822");  ExtensionMap.Add(".eps", "application/postscript");  ExtensionMap.Add(".flr", "x-world/x-vrml");  ExtensionMap.Add(".fif", "application/fractals");  ExtensionMap.Add(".gtar", "application/x-gtar");  ExtensionMap.Add(".gif", "image/gif");  ExtensionMap.Add(".gz", "application/x-gzip");  ExtensionMap.Add(".hta", "application/hta");  ExtensionMap.Add(".htc", "text/x-component");  ExtensionMap.Add(".htt", "text/webviewhtml");  ExtensionMap.Add(".h", "text/plain");  ExtensionMap.Add(".hdf", "application/x-hdf");  ExtensionMap.Add(".hlp", "application/winhlp");  ExtensionMap.Add(".html", "text/html");  ExtensionMap.Add(".htm", "text/html");  ExtensionMap.Add(".hqx", "application/mac-binhex40");  ExtensionMap.Add(".isp", "application/x-internet-signup");  ExtensionMap.Add(".iii", "application/x-iphone");  ExtensionMap.Add(".ief", "image/ief");  ExtensionMap.Add(".ivf", "video/x-ivf");  ExtensionMap.Add(".ins", "application/x-internet-signup");  ExtensionMap.Add(".ico", "image/x-icon");  ExtensionMap.Add(".jpg", "image/jpeg");  ExtensionMap.Add(".jfif", "image/pjpeg");  ExtensionMap.Add(".jpe", "image/jpeg");  ExtensionMap.Add(".jpeg", "image/jpeg");  ExtensionMap.Add(".js", "application/x-javascript");  ExtensionMap.Add(".lsx", "video/x-la-asf");  ExtensionMap.Add(".latex", "application/x-latex");  ExtensionMap.Add(".lsf", "video/x-la-asf");  ExtensionMap.Add(".manifest", "application/x-ms-manifest");  ExtensionMap.Add(".mhtml", "message/rfc822");  ExtensionMap.Add(".mny", "application/x-msmoney");  ExtensionMap.Add(".mht", "message/rfc822");  ExtensionMap.Add(".mid", "audio/mid");  ExtensionMap.Add(".mpv2", "video/mpeg");  ExtensionMap.Add(".man", "application/x-troff-man");  ExtensionMap.Add(".mvb", "application/x-msmediaview");  ExtensionMap.Add(".mpeg", "video/mpeg");  ExtensionMap.Add(".m3u", "audio/x-mpegurl");  ExtensionMap.Add(".mdb", "application/x-msaccess");  ExtensionMap.Add(".mpp", "application/vnd.ms-project");  ExtensionMap.Add(".m1v", "video/mpeg");  ExtensionMap.Add(".mpa", "video/mpeg");  ExtensionMap.Add(".me", "application/x-troff-me");  ExtensionMap.Add(".m13", "application/x-msmediaview");  ExtensionMap.Add(".movie", "video/x-sgi-movie");  ExtensionMap.Add(".m14", "application/x-msmediaview");  ExtensionMap.Add(".mpe", "video/mpeg");  ExtensionMap.Add(".mp2", "video/mpeg");  ExtensionMap.Add(".mov", "video/quicktime");  ExtensionMap.Add(".mp3", "audio/mpeg");  ExtensionMap.Add(".mpg", "video/mpeg");  ExtensionMap.Add(".ms", "application/x-troff-ms");  ExtensionMap.Add(".nc", "application/x-netcdf");  ExtensionMap.Add(".nws", "message/rfc822");  ExtensionMap.Add(".oda", "application/oda");  ExtensionMap.Add(".ods", "application/oleobject");  ExtensionMap.Add(".pmc", "application/x-perfmon");  ExtensionMap.Add(".p7r", "application/x-pkcs7-certreqresp");  ExtensionMap.Add(".p7b", "application/x-pkcs7-certificates");  ExtensionMap.Add(".p7s", "application/pkcs7-signature");  ExtensionMap.Add(".pmw", "application/x-perfmon");  ExtensionMap.Add(".ps", "application/postscript");  ExtensionMap.Add(".p7c", "application/pkcs7-mime");  ExtensionMap.Add(".pbm", "image/x-portable-bitmap");  ExtensionMap.Add(".ppm", "image/x-portable-pixmap");  ExtensionMap.Add(".pub", "application/x-mspublisher");  ExtensionMap.Add(".pnm", "image/x-portable-anymap");  ExtensionMap.Add(".pml", "application/x-perfmon");  ExtensionMap.Add(".p10", "application/pkcs10");  ExtensionMap.Add(".pfx", "application/x-pkcs12");  ExtensionMap.Add(".p12", "application/x-pkcs12");  ExtensionMap.Add(".pdf", "application/pdf");  ExtensionMap.Add(".pps", "application/vnd.ms-powerpoint");  ExtensionMap.Add(".p7m", "application/pkcs7-mime");  ExtensionMap.Add(".pko", "application/vndms-pkipko");  ExtensionMap.Add(".ppt", "application/vnd.ms-powerpoint");  ExtensionMap.Add(".pmr", "application/x-perfmon");  ExtensionMap.Add(".pma", "application/x-perfmon");  ExtensionMap.Add(".pot", "application/vnd.ms-powerpoint");  ExtensionMap.Add(".prf", "application/pics-rules");  ExtensionMap.Add(".pgm", "image/x-portable-graymap");  ExtensionMap.Add(".qt", "video/quicktime");  ExtensionMap.Add(".ra", "audio/x-pn-realaudio");  ExtensionMap.Add(".rgb", "image/x-rgb");  ExtensionMap.Add(".ram", "audio/x-pn-realaudio");  ExtensionMap.Add(".rmi", "audio/mid");  ExtensionMap.Add(".ras", "image/x-cmu-raster");  ExtensionMap.Add(".roff", "application/x-troff");  ExtensionMap.Add(".rtf", "application/rtf");  ExtensionMap.Add(".rtx", "text/richtext");  ExtensionMap.Add(".sv4crc", "application/x-sv4crc");  ExtensionMap.Add(".spc", "application/x-pkcs7-certificates");  ExtensionMap.Add(".setreg", "application/set-registration-initiation");  ExtensionMap.Add(".snd", "audio/basic");  ExtensionMap.Add(".stl", "application/vndms-pkistl");  ExtensionMap.Add(".setpay", "application/set-payment-initiation");  ExtensionMap.Add(".stm", "text/html");  ExtensionMap.Add(".shar", "application/x-shar");  ExtensionMap.Add(".sh", "application/x-sh");  ExtensionMap.Add(".sit", "application/x-stuffit");  ExtensionMap.Add(".spl", "application/futuresplash");  ExtensionMap.Add(".sct", "text/scriptlet");  ExtensionMap.Add(".scd", "application/x-msschedule");  ExtensionMap.Add(".sst", "application/vndms-pkicertstore");  ExtensionMap.Add(".src", "application/x-wais-source");  ExtensionMap.Add(".sv4cpio", "application/x-sv4cpio");  ExtensionMap.Add(".tex", "application/x-tex");  ExtensionMap.Add(".tgz", "application/x-compressed");  ExtensionMap.Add(".t", "application/x-troff");  ExtensionMap.Add(".tar", "application/x-tar");  ExtensionMap.Add(".tr", "application/x-troff");  ExtensionMap.Add(".tif", "image/tiff");  ExtensionMap.Add(".txt", "text/plain");  ExtensionMap.Add(".texinfo", "application/x-texinfo");  ExtensionMap.Add(".trm", "application/x-msterminal");  ExtensionMap.Add(".tiff", "image/tiff");  ExtensionMap.Add(".tcl", "application/x-tcl");  ExtensionMap.Add(".texi", "application/x-texinfo");  ExtensionMap.Add(".tsv", "text/tab-separated-values");  ExtensionMap.Add(".ustar", "application/x-ustar");  ExtensionMap.Add(".uls", "text/iuls");  ExtensionMap.Add(".vcf", "text/x-vcard");  ExtensionMap.Add(".wps", "application/vnd.ms-works");  ExtensionMap.Add(".wav", "audio/wav");  ExtensionMap.Add(".wrz", "x-world/x-vrml");  ExtensionMap.Add(".wri", "application/x-mswrite");  ExtensionMap.Add(".wks", "application/vnd.ms-works");  ExtensionMap.Add(".wmf", "application/x-msmetafile");  ExtensionMap.Add(".wcm", "application/vnd.ms-works");  ExtensionMap.Add(".wrl", "x-world/x-vrml");  ExtensionMap.Add(".wdb", "application/vnd.ms-works");  ExtensionMap.Add(".wsdl", "text/xml");  ExtensionMap.Add(".xml", "text/xml");  ExtensionMap.Add(".xlm", "application/vnd.ms-excel");  ExtensionMap.Add(".xaf", "x-world/x-vrml");  ExtensionMap.Add(".xla", "application/vnd.ms-excel");  ExtensionMap.Add(".xls", "application/vnd.ms-excel");  ExtensionMap.Add(".xof", "x-world/x-vrml");  ExtensionMap.Add(".xlt", "application/vnd.ms-excel");  ExtensionMap.Add(".xlc", "application/vnd.ms-excel");  ExtensionMap.Add(".xsl", "text/xml");  ExtensionMap.Add(".xbm", "image/x-xbitmap");  ExtensionMap.Add(".xlw", "application/vnd.ms-excel");  ExtensionMap.Add(".xpm", "image/x-xpixmap");  ExtensionMap.Add(".xwd", "image/x-xwindowdump");  ExtensionMap.Add(".xsd", "text/xml");  ExtensionMap.Add(".z", "application/x-compress");  ExtensionMap.Add(".zip", "application/x-zip-compressed");  ExtensionMap.Add(".*", "application/octet-stream");  }   public static string GetMimeMapping(string fileExtension)  {  if (ExtensionMap.ContainsKey(fileExtension))  return ExtensionMap[fileExtension];  else  return ExtensionMap[".*"];  } } 

qaru.site


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector