feature #29936 [Mime] Add a set of default content-types for some extensions (fabpot)

This PR was merged into the 4.3-dev branch.

Discussion
----------

[Mime] Add a set of default content-types for some extensions

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no     <!-- see https://symfony.com/bc -->
| Deprecations? | no <!-- don't forget to update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass?   | yes    <!-- please add some, will be required by reviewers -->
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

Some extensions have many possible content-types. This PR forces the first (preferred) content type for some extensions (the preset comes from Swiftmailer).

Commits
-------

37065d45f3 [Mime] added a set of default content-types for some extensions
This commit is contained in:
Fabien Potencier 2019-01-27 11:47:24 +01:00
commit 57f3cbb87e
2 changed files with 94 additions and 27 deletions

View File

@ -1655,6 +1655,7 @@ final class MimeTypes implements MimeTypesInterface
'appimage' => ['application/vnd.appimage', 'application/x-iso9660-appimage'],
'application' => ['application/x-ms-application'],
'apr' => ['application/vnd.lotus-approach'],
'aps' => ['application/postscript'],
'ar' => ['application/x-archive'],
'arc' => ['application/x-freearc'],
'arj' => ['application/x-arj'],
@ -1707,7 +1708,7 @@ final class MimeTypes implements MimeTypesInterface
'bsdiff' => ['application/x-bsdiff'],
'btif' => ['image/prs.btif'],
'bz' => ['application/x-bzip', 'application/x-bzip2'],
'bz2' => ['application/x-bzip', 'application/x-bzip2'],
'bz2' => ['application/x-bz2', 'application/x-bzip', 'application/x-bzip2'],
'c' => ['text/x-c', 'text/x-csrc'],
'c++' => ['text/x-c++src'],
'c11amc' => ['application/vnd.cluetrust.cartomobile-config'],
@ -1958,7 +1959,7 @@ final class MimeTypes implements MimeTypesInterface
'flc' => ['video/fli', 'video/x-fli', 'video/x-flic'],
'fli' => ['video/fli', 'video/x-fli', 'video/x-flic'],
'flo' => ['application/vnd.micrografx.flo'],
'flv' => ['application/x-flash-video', 'flv-application/octet-stream', 'video/flv', 'video/x-flv'],
'flv' => ['video/x-flv', 'application/x-flash-video', 'flv-application/octet-stream', 'video/flv'],
'flw' => ['application/vnd.kde.kivio', 'application/x-kivio'],
'flx' => ['text/vnd.fmi.flexstor'],
'fly' => ['text/vnd.fly'],
@ -2043,7 +2044,7 @@ final class MimeTypes implements MimeTypesInterface
'gvp' => ['text/google-video-pointer', 'text/x-google-video-pointer'],
'gxf' => ['application/gxf'],
'gxt' => ['application/vnd.geonext'],
'gz' => ['application/gzip', 'application/x-gzip'],
'gz' => ['application/x-gzip', 'application/gzip'],
'h' => ['text/x-c', 'text/x-chdr'],
'h++' => ['text/x-c++hdr'],
'h261' => ['video/h261'],
@ -2066,7 +2067,7 @@ final class MimeTypes implements MimeTypesInterface
'hpid' => ['application/vnd.hp-hpid'],
'hpp' => ['text/x-c++hdr'],
'hps' => ['application/vnd.hp-hps'],
'hqx' => ['application/mac-binhex40'],
'hqx' => ['application/stuffit', 'application/mac-binhex40'],
'hs' => ['text/x-haskell'],
'htke' => ['application/vnd.kenameaapp'],
'htm' => ['text/html'],
@ -2127,7 +2128,7 @@ final class MimeTypes implements MimeTypesInterface
'j2k' => ['image/x-jp2-codestream'],
'jad' => ['text/vnd.sun.j2me.app-descriptor'],
'jam' => ['application/vnd.jam'],
'jar' => ['application/java-archive', 'application/x-jar', 'application/x-java-archive'],
'jar' => ['application/x-java-archive', 'application/java-archive', 'application/x-jar'],
'java' => ['text/x-java', 'text/x-java-source'],
'jceks' => ['application/x-java-jce-keystore'],
'jisp' => ['application/vnd.jisp'],
@ -2149,7 +2150,7 @@ final class MimeTypes implements MimeTypesInterface
'jpr' => ['application/x-jbuilder-project'],
'jpx' => ['application/x-jbuilder-project', 'image/jpx'],
'jrd' => ['application/jrd+json'],
'js' => ['application/javascript', 'application/x-javascript', 'text/javascript'],
'js' => ['text/javascript', 'application/javascript', 'application/x-javascript'],
'jsm' => ['application/javascript', 'application/x-javascript', 'text/javascript'],
'json' => ['application/json'],
'json-patch' => ['application/json-patch+json'],
@ -2238,10 +2239,10 @@ final class MimeTypes implements MimeTypesInterface
'm2ts' => ['video/mp2t'],
'm2v' => ['video/mpeg'],
'm3a' => ['audio/mpeg'],
'm3u' => ['application/m3u', 'application/vnd.apple.mpegurl', 'audio/m3u', 'audio/mpegurl', 'audio/x-m3u', 'audio/x-mp3-playlist', 'audio/x-mpegurl'],
'm3u' => ['audio/x-mpegurl', 'application/m3u', 'application/vnd.apple.mpegurl', 'audio/m3u', 'audio/mpegurl', 'audio/x-m3u', 'audio/x-mp3-playlist'],
'm3u8' => ['application/m3u', 'application/vnd.apple.mpegurl', 'audio/m3u', 'audio/mpegurl', 'audio/x-m3u', 'audio/x-mp3-playlist', 'audio/x-mpegurl'],
'm4' => ['application/x-m4'],
'm4a' => ['audio/m4a', 'audio/mp4', 'audio/x-m4a'],
'm4a' => ['audio/mp4', 'audio/m4a', 'audio/x-m4a'],
'm4b' => ['audio/x-m4b'],
'm4r' => ['audio/x-m4r'],
'm4u' => ['video/vnd.mpegurl', 'video/x-mpegurl'],
@ -2265,7 +2266,7 @@ final class MimeTypes implements MimeTypesInterface
'mcd' => ['application/vnd.mcd'],
'mcurl' => ['text/vnd.curl.mcurl'],
'md' => ['text/markdown', 'text/x-markdown'],
'mdb' => ['application/mdb', 'application/msaccess', 'application/vnd.ms-access', 'application/vnd.msaccess', 'application/x-mdb', 'application/x-msaccess', 'zz-application/zz-winassoc-mdb'],
'mdb' => ['application/x-msaccess', 'application/mdb', 'application/msaccess', 'application/vnd.ms-access', 'application/vnd.msaccess', 'application/x-mdb', 'zz-application/zz-winassoc-mdb'],
'mdi' => ['image/vnd.ms-modi'],
'mdx' => ['application/x-genesis-32x-rom'],
'me' => ['text/troff', 'text/x-troff-me'],
@ -2322,7 +2323,7 @@ final class MimeTypes implements MimeTypesInterface
'mp2' => ['audio/mp2', 'audio/mpeg', 'audio/x-mp2', 'video/mpeg', 'video/mpeg-system', 'video/x-mpeg', 'video/x-mpeg-system', 'video/x-mpeg2'],
'mp21' => ['application/mp21'],
'mp2a' => ['audio/mpeg'],
'mp3' => ['audio/mp3', 'audio/mpeg', 'audio/x-mp3', 'audio/x-mpeg', 'audio/x-mpg'],
'mp3' => ['audio/mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/x-mpeg', 'audio/x-mpg'],
'mp4' => ['video/mp4', 'video/mp4v-es', 'video/x-m4v'],
'mp4a' => ['audio/mp4'],
'mp4s' => ['application/mp4'],
@ -2410,12 +2411,12 @@ final class MimeTypes implements MimeTypesInterface
'odc' => ['application/vnd.oasis.opendocument.chart'],
'odf' => ['application/vnd.oasis.opendocument.formula'],
'odft' => ['application/vnd.oasis.opendocument.formula-template'],
'odg' => ['application/vnd.oasis.opendocument.graphics'],
'odg' => ['vnd.oasis.opendocument.graphics', 'application/vnd.oasis.opendocument.graphics'],
'odi' => ['application/vnd.oasis.opendocument.image'],
'odm' => ['application/vnd.oasis.opendocument.text-master'],
'odp' => ['application/vnd.oasis.opendocument.presentation'],
'ods' => ['application/vnd.oasis.opendocument.spreadsheet'],
'odt' => ['application/vnd.oasis.opendocument.text'],
'odp' => ['vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.presentation'],
'ods' => ['vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.spreadsheet'],
'odt' => ['vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.text'],
'oga' => ['audio/ogg', 'audio/vorbis', 'audio/x-flac+ogg', 'audio/x-ogg', 'audio/x-oggflac', 'audio/x-speex+ogg', 'audio/x-vorbis', 'audio/x-vorbis+ogg'],
'ogg' => ['audio/ogg', 'audio/vorbis', 'audio/x-flac+ogg', 'audio/x-ogg', 'audio/x-oggflac', 'audio/x-speex+ogg', 'audio/x-vorbis', 'audio/x-vorbis+ogg', 'video/ogg', 'video/x-ogg', 'video/x-theora', 'video/x-theora+ogg'],
'ogm' => ['video/x-ogm', 'video/x-ogm+ogg'],
@ -2485,7 +2486,7 @@ final class MimeTypes implements MimeTypesInterface
'pcx' => ['image/vnd.zbrush.pcx', 'image/x-pcx'],
'pdb' => ['application/vnd.palm', 'application/x-aportisdoc', 'application/x-palm-database'],
'pdc' => ['application/x-aportisdoc'],
'pdf' => ['application/acrobat', 'application/nappdf', 'application/pdf', 'application/x-pdf', 'image/pdf'],
'pdf' => ['application/pdf', 'application/acrobat', 'application/nappdf', 'application/x-pdf', 'image/pdf'],
'pdf.bz2' => ['application/x-bzpdf'],
'pdf.gz' => ['application/x-gzpdf'],
'pdf.lz' => ['application/x-lzpdf'],
@ -2542,7 +2543,7 @@ final class MimeTypes implements MimeTypesInterface
'pps' => ['application/mspowerpoint', 'application/powerpoint', 'application/vnd.ms-powerpoint', 'application/x-mspowerpoint'],
'ppsm' => ['application/vnd.ms-powerpoint.slideshow.macroenabled.12'],
'ppsx' => ['application/vnd.openxmlformats-officedocument.presentationml.slideshow'],
'ppt' => ['application/mspowerpoint', 'application/powerpoint', 'application/vnd.ms-powerpoint', 'application/x-mspowerpoint'],
'ppt' => ['application/vnd.ms-powerpoint', 'application/mspowerpoint', 'application/powerpoint', 'application/x-mspowerpoint'],
'pptm' => ['application/vnd.ms-powerpoint.presentation.macroenabled.12'],
'pptx' => ['application/vnd.openxmlformats-officedocument.presentationml.presentation'],
'ppz' => ['application/mspowerpoint', 'application/powerpoint', 'application/vnd.ms-powerpoint', 'application/x-mspowerpoint'],
@ -2600,7 +2601,7 @@ final class MimeTypes implements MimeTypesInterface
'raf' => ['image/x-fuji-raf'],
'ram' => ['application/ram', 'audio/x-pn-realaudio'],
'raml' => ['application/raml+yaml'],
'rar' => ['application/vnd.rar', 'application/x-rar', 'application/x-rar-compressed'],
'rar' => ['application/x-rar-compressed', 'application/vnd.rar', 'application/x-rar'],
'ras' => ['image/x-cmu-raster'],
'raw' => ['image/x-panasonic-raw', 'image/x-panasonic-rw'],
'raw-disk-image' => ['application/x-raw-disk-image'],
@ -2709,7 +2710,7 @@ final class MimeTypes implements MimeTypesInterface
'silo' => ['model/mesh'],
'sis' => ['application/vnd.symbian.install'],
'sisx' => ['application/vnd.symbian.install', 'x-epoc/x-sisx-app'],
'sit' => ['application/stuffit', 'application/x-sit', 'application/x-stuffit'],
'sit' => ['application/x-stuffit', 'application/stuffit', 'application/x-sit'],
'sitx' => ['application/x-stuffitx'],
'siv' => ['application/sieve'],
'sk' => ['image/x-skencil'],
@ -2807,7 +2808,7 @@ final class MimeTypes implements MimeTypesInterface
't3' => ['application/x-t3vm-image'],
'taglet' => ['application/vnd.mynfc'],
'tao' => ['application/vnd.tao.intent-module-archive'],
'tar' => ['application/x-gtar', 'application/x-tar'],
'tar' => ['application/x-tar', 'application/x-gtar'],
'tar.Z' => ['application/x-tarz'],
'tar.bz' => ['application/x-bzip-compressed-tar'],
'tar.bz2' => ['application/x-bzip-compressed-tar'],
@ -2862,7 +2863,7 @@ final class MimeTypes implements MimeTypesInterface
'tsv' => ['text/tab-separated-values'],
'tta' => ['audio/tta', 'audio/x-tta'],
'ttc' => ['font/collection'],
'ttf' => ['application/x-font-ttf', 'font/ttf'],
'ttf' => ['application/x-font-truetype', 'application/x-font-ttf', 'font/ttf'],
'ttl' => ['text/turtle'],
'ttx' => ['application/x-font-ttx'],
'twd' => ['application/vnd.simtech-mindmapper'],
@ -2931,7 +2932,7 @@ final class MimeTypes implements MimeTypesInterface
'vb' => ['application/x-virtual-boy-rom'],
'vcard' => ['text/directory', 'text/vcard', 'text/x-vcard'],
'vcd' => ['application/x-cdlink'],
'vcf' => ['text/directory', 'text/vcard', 'text/x-vcard'],
'vcf' => ['text/x-vcard', 'text/directory', 'text/vcard'],
'vcg' => ['application/vnd.groove-vcard'],
'vcs' => ['application/ics', 'text/calendar', 'text/x-vcalendar'],
'vct' => ['text/directory', 'text/vcard', 'text/x-vcard'],
@ -2965,7 +2966,7 @@ final class MimeTypes implements MimeTypesInterface
'vxml' => ['application/voicexml+xml'],
'w3d' => ['application/x-director'],
'wad' => ['application/x-doom', 'application/x-doom-wad', 'application/x-wii-wad'],
'wav' => ['audio/vnd.wave', 'audio/wav', 'audio/x-wav'],
'wav' => ['audio/wav', 'audio/vnd.wave', 'audio/x-wav'],
'wax' => ['application/x-ms-asx', 'audio/x-ms-asx', 'audio/x-ms-wax', 'video/x-ms-wax', 'video/x-ms-wmx', 'video/x-ms-wvx'],
'wb1' => ['application/x-quattropro'],
'wb2' => ['application/x-quattropro'],
@ -2988,14 +2989,14 @@ final class MimeTypes implements MimeTypesInterface
'wkdownload' => ['application/x-partial-download'],
'wks' => ['application/lotus123', 'application/vnd.lotus-1-2-3', 'application/vnd.ms-works', 'application/wk1', 'application/x-123', 'application/x-lotus123', 'zz-application/zz-winassoc-123'],
'wm' => ['video/x-ms-wm'],
'wma' => ['audio/wma', 'audio/x-ms-wma'],
'wma' => ['audio/x-ms-wma', 'audio/wma'],
'wmd' => ['application/x-ms-wmd'],
'wmf' => ['application/wmf', 'application/x-msmetafile', 'application/x-wmf', 'image/wmf', 'image/x-win-metafile', 'image/x-wmf'],
'wml' => ['text/vnd.wap.wml'],
'wmlc' => ['application/vnd.wap.wmlc'],
'wmls' => ['text/vnd.wap.wmlscript'],
'wmlsc' => ['application/vnd.wap.wmlscriptc'],
'wmv' => ['video/x-ms-wmv'],
'wmv' => ['audio/x-ms-wmv', 'video/x-ms-wmv'],
'wmx' => ['application/x-ms-asx', 'audio/x-ms-asx', 'video/x-ms-wax', 'video/x-ms-wmx', 'video/x-ms-wvx'],
'wmz' => ['application/x-ms-wmz', 'application/x-msmetafile'],
'woff' => ['application/font-woff', 'application/x-font-woff', 'font/woff'],
@ -3068,7 +3069,7 @@ final class MimeTypes implements MimeTypesInterface
'xll' => ['application/msexcel', 'application/vnd.ms-excel', 'application/x-msexcel', 'zz-application/zz-winassoc-xls'],
'xlm' => ['application/msexcel', 'application/vnd.ms-excel', 'application/x-msexcel', 'zz-application/zz-winassoc-xls'],
'xlr' => ['application/vnd.ms-works'],
'xls' => ['application/msexcel', 'application/vnd.ms-excel', 'application/x-msexcel', 'zz-application/zz-winassoc-xls'],
'xls' => ['application/vnd.ms-excel', 'application/msexcel', 'application/x-msexcel', 'zz-application/zz-winassoc-xls'],
'xlsb' => ['application/vnd.ms-excel.sheet.binary.macroenabled.12'],
'xlsm' => ['application/vnd.ms-excel.sheet.macroenabled.12'],
'xlsx' => ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
@ -3117,7 +3118,7 @@ final class MimeTypes implements MimeTypesInterface
'z8' => ['application/x-zmachine'],
'zabw' => ['application/x-abiword'],
'zaz' => ['application/vnd.zzazz.deck+xml'],
'zip' => ['application/x-zip', 'application/x-zip-compressed', 'application/zip'],
'zip' => ['application/zip', 'application/x-zip', 'application/x-zip-compressed'],
'zir' => ['application/vnd.zul'],
'zirz' => ['application/vnd.zul'],
'zmm' => ['application/vnd.handheld-entertainment+xml'],

View File

@ -73,7 +73,73 @@ foreach ($map as $mimeType => $exts) {
$data .= $post;
// reverse map
$exts = [];
// we prefill the extensions with some preferences for content-types
$exts = [
'aif' => ['audio/x-aiff'],
'aiff' => ['audio/x-aiff'],
'aps' => ['application/postscript'],
'avi' => ['video/avi'],
'bmp' => ['image/bmp'],
'bz2' => ['application/x-bz2'],
'css' => ['text/css'],
'csv' => ['text/csv'],
'dmg' => ['application/x-apple-diskimage'],
'doc' => ['application/msword'],
'docx' => ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
'eml' => ['message/rfc822'],
'exe' => ['application/x-ms-dos-executable'],
'flv' => ['video/x-flv'],
'gz' => ['application/x-gzip'],
'hqx' => ['application/stuffit'],
'htm' => ['text/html'],
'html' => ['text/html'],
'gif' => ['image/gif'],
'jar' => ['application/x-java-archive'],
'jpeg' => ['image/jpeg'],
'jpg' => ['image/jpeg'],
'js' => ['text/javascript'],
'm3u' => ['audio/x-mpegurl'],
'm4a' => ['audio/mp4'],
'mdb' => ['application/x-msaccess'],
'mid' => ['audio/midi'],
'midi' => ['audio/midi'],
'mov' => ['video/quicktime'],
'mp3' => ['audio/mpeg'],
'mp4' => ['video/mp4'],
'mpeg' => ['video/mpeg'],
'mpg' => ['video/mpeg'],
'odg' => ['vnd.oasis.opendocument.graphics'],
'odp' => ['vnd.oasis.opendocument.presentation'],
'ods' => ['vnd.oasis.opendocument.spreadsheet'],
'odt' => ['vnd.oasis.opendocument.text'],
'ogg' => ['audio/ogg'],
'pdf' => ['application/pdf'],
'php' => ['application/x-php'],
'php3' => ['application/x-php'],
'php4' => ['application/x-php'],
'php5' => ['application/x-php'],
'png' => ['image/png'],
'ppt' => ['application/vnd.ms-powerpoint'],
'pptx' => ['application/vnd.openxmlformats-officedocument.presentationml.presentation'],
'ps' => ['application/postscript'],
'rar' => ['application/x-rar-compressed'],
'rtf' => ['application/rtf'],
'sit' => ['application/x-stuffit'],
'svg' => ['image/svg+xml'],
'tar' => ['application/x-tar'],
'tif' => ['image/tiff'],
'tiff' => ['image/tiff'],
'ttf' => ['application/x-font-truetype'],
'txt' => ['text/plain'],
'vcf' => ['text/x-vcard'],
'wav' => ['audio/wav'],
'wma' => ['audio/x-ms-wma'],
'wmv' => ['audio/x-ms-wmv'],
'xls' => ['application/vnd.ms-excel'],
'xlsx' => ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
'xml' => ['application/xml'],
'zip' => ['application/zip'],
];
foreach ($map as $mimeType => $extensions) {
foreach ($extensions as $extension) {
$exts[$extension][] = $mimeType;