Библиотека для межплатформенного сопоставления типов MIME с расширениями файлов и наоборот - PullRequest
3 голосов
/ 20 ноября 2010

TL; DR: Вопрос в следующем:

  • Знаете ли вы о кроссплатформенной библиотеке, которую я могу использовать из C ++ для сопоставления типов (ов) MIME <-> расширения файлов??

Мое приложение должно обрабатывать файлы изображений и видео одинаково.Я стараюсь быть максимально независимым от платформы, поэтому я решил использовать Qt4 в качестве своей основной библиотеки.Платформа Phonon (для обработки видеофайлов) и QImage (для обработки изображений, очевидно) могут сообщать, какие форматы файлов они поддерживают.Phonon вернет список типов MIME, поддерживаемых установленным бэкэндом, а QImage выражает поддерживаемые форматы файлов со списком расширений файлов.

Приложение должно * QString fileName узнать, создавать ли VideoObject или ImageObject от него.Мой подход заключается в создании map<QString, FuncPtr>, который возвращает соответствующий фабричный метод для создания правильного объекта.Для строки я в настоящее время использую расширение файла, потому что очень легко определить расширение файла по имени файла.Но теперь у меня нет элегантного способа регистрации поддерживаемых типов видеофайлов, поскольку я знаю только их тип MIME.

Если бы я использовал типы MIME для ключа в моем map<QString, FuncPtr>, я столкнулся бы сс проблемой, как

  • a) сопоставить имя файла с типом MIME (не знаю, как сделать эту платформу независимо и расширяемо)
  • b) сопоставить расширения файлов, предоставляемыеQImage для типов MIME

Я знаю, что, согласно моим исследованиям до сих пор, многие люди предлагают использовать «файл Apache mime.types», который не позволит мне поддерживать новые форматы файлов (WebM, WebP, ...) когда клиент обновляет серверные части.

Другие предложения, которые я нашел, - это сканировать «/etc/mime.types» в Linux (я мог бы сделать это) или «запрашивать реестр» в Windows (не знаю, как это сделать).Но это кажется очень ограниченным этими двумя платформами, как насчет Mac OS X и т. Д.

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

1 Ответ

4 голосов
/ 20 ноября 2010

Как вы уже написали на свой вопрос, я бы взял mimefile из Apache или какого-либо дистрибутива Linux и отправил его вместе с вашим приложением.

Лично я думаю, что нет смысла иметь «библиотеку», чтобы «постоянно обновляться».

MIME вырос за последние годы, но в действительности вам просто нужно 1% или меньше всех определенных типов MIME. Люди не имеют всевозможных форматов файлов на своих

Если вы хотите просмотреть некоторые из них, IANA перечисляет большинство популярных типов MIME.

TL; DR: поставьте ваше приложение с главным образом полным mimefile из Apache или какого-либо дистрибутива Linux и не беспокойтесь о том, чтобы прочитать его «вживую» со всех целевых систем.

...