前言

最近在弄文件上传、下载、在线预览时经常需要设置请求标头或者响应标头的Content-Type 属性。所以研究了一下spring支持哪些Content-Type,通过研究MediaTypeFactory.getMediaType的源码,可以得知spring是将支持的Content-Type 维护在/org/springframework/http/mime.types文件中。

private static MultiValueMap<String, MediaType> parseMimeTypes() {
        InputStream is = MediaTypeFactory.class.getResourceAsStream("/org/springframework/http/mime.types");

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.US_ASCII));
            Throwable var2 = null;

            try {
                MultiValueMap<String, MediaType> result = new LinkedMultiValueMap();

                label111:
                while(true) {
                    String line;
                    if ((line = reader.readLine()) != null) {
                        if (line.isEmpty() || line.charAt(0) == '#') {
                            continue;
                        }

                        String[] tokens = StringUtils.tokenizeToStringArray(line, " \t\n\r\f");
                        MediaType mediaType = MediaType.parseMediaType(tokens[0]);
                        int i = 1;

                        while(true) {
                            if (i >= tokens.length) {
                                continue label111;
                            }

                            String fileExtension = tokens[i].toLowerCase(Locale.ENGLISH);
                            result.add(fileExtension, mediaType);
                            ++i;
                        }
                    }

                    LinkedMultiValueMap var5 = result;
                    return var5;
                }
            } catch (Throwable var17) {
                var2 = var17;
                throw var17;
            } finally {
                if (reader != null) {
                    if (var2 != null) {
                        try {
                            reader.close();
                        } catch (Throwable var16) {
                            var2.addSuppressed(var16);
                        }
                    } else {
                        reader.close();
                    }
                }

            }
        } catch (IOException var19) {
            throw new IllegalStateException("Could not load '/org/springframework/http/mime.types'", var19);
        }
    }

通过上面查找文件的路径找到了org.springframework:spring-web包下http目录中的mime.types文件
请添加图片描述

结果打开后居然发现 有多达1838个Content-Type,不过许多都是被注释掉的。过滤掉被注释的最终能被获取出来的一共是982个,本着好记性不如烂笔头的精神,我把这982个Content-Type已经它对应的文件后缀,整理了一下,形成了下面的表格,也方便以后查阅。

mime.types文件:
请添加图片描述

​spring-web将mime.types文件加载到这个map里
请添加图片描述

spring-web里支持的文件以及对应的Content-Type

文件类型 MIME Type
ez application/andrew-inset
aw application/applixware
atom application/atom+xml
atomcat application/atomcat+xml
atomsvc application/atomsvc+xml
ccxml application/ccxml+xml
cdmia application/cdmi-capability
cdmic application/cdmi-container
cdmid application/cdmi-domain
cdmio application/cdmi-object
cdmiq application/cdmi-queue
cu application/cu-seeme
davmount application/davmount+xml
dbk application/docbook+xml
dssc application/dssc+der
xdssc application/dssc+xml
ecma application/ecmascript
emma application/emma+xml
epub application/epub+zip
exi application/exi
pfr application/font-tdpfr
woff application/font-woff
gml application/gml+xml
gpx application/gpx+xml
gxf application/gxf
stk application/hyperstudio
ink application/inkml+xml
inkml application/inkml+xml
ipfix application/ipfix
jar application/java-archive
ser application/java-serialized-object
class application/java-vm
js application/javascript
json application/json
jsonml application/jsonml+json
lostxml application/lost+xml
hqx application/mac-binhex40
cpt application/mac-compactpro
mads application/mads+xml
mrc application/marc
mrcx application/marcxml+xml
ma application/mathematica
nb application/mathematica
mb application/mathematica
mathml application/mathml+xml
mbox application/mbox
mscml application/mediaservercontrol+xml
metalink application/metalink+xml
meta4 application/metalink4+xml
mets application/mets+xml
mods application/mods+xml
m21 application/mp21
mp21 application/mp21
mp4s application/mp4
doc application/msword
dot application/msword
mxf application/mxf
bin application/octet-stream
dms application/octet-stream
lrf application/octet-stream
mar application/octet-stream
so application/octet-stream
dist application/octet-stream
distz application/octet-stream
pkg application/octet-stream
bpk application/octet-stream
dump application/octet-stream
elc application/octet-stream
deploy application/octet-stream
oda application/oda
opf application/oebps-package+xml
ogx application/ogg
omdoc application/omdoc+xml
onetoc application/onenote
onetoc2 application/onenote
onetmp application/onenote
onepkg application/onenote
oxps application/oxps
xer application/patch-ops-error+xml
pdf application/pdf
pgp application/pgp-encrypted
asc application/pgp-signature
sig application/pgp-signature
prf application/pics-rules
p10 application/pkcs10
p7m application/pkcs7-mime
p7c application/pkcs7-mime
p7s application/pkcs7-signature
p8 application/pkcs8
ac application/pkix-attr-cert
cer application/pkix-cert
crl application/pkix-crl
pkipath application/pkix-pkipath
pki application/pkixcmp
pls application/pls+xml
ai application/postscript
eps application/postscript
ps application/postscript
cww application/prs.cww
pskcxml application/pskc+xml
rdf application/rdf+xml
rif application/reginfo+xml
rnc application/relax-ng-compact-syntax
rl application/resource-lists+xml
rld application/resource-lists-diff+xml
rs application/rls-services+xml
gbr application/rpki-ghostbusters
mft application/rpki-manifest
roa application/rpki-roa
rsd application/rsd+xml
rss application/rss+xml
rtf application/rtf
sbml application/sbml+xml
scq application/scvp-cv-request
scs application/scvp-cv-response
spq application/scvp-vp-request
spp application/scvp-vp-response
sdp application/sdp
setpay application/set-payment-initiation
setreg application/set-registration-initiation
shf application/shf+xml
smi application/smil+xml
smil application/smil+xml
rq application/sparql-query
srx application/sparql-results+xml
gram application/srgs
grxml application/srgs+xml
sru application/sru+xml
ssdl application/ssdl+xml
ssml application/ssml+xml
tei application/tei+xml
teicorpus application/tei+xml
tfi application/thraud+xml
tsd application/timestamped-data
plb application/vnd.3gpp.pic-bw-large
psb application/vnd.3gpp.pic-bw-small
pvb application/vnd.3gpp.pic-bw-var
tcap application/vnd.3gpp2.tcap
pwn application/vnd.3m.post-it-notes
aso application/vnd.accpac.simply.aso
imp application/vnd.accpac.simply.imp
acu application/vnd.acucobol
atc application/vnd.acucorp
acutc application/vnd.acucorp
air application/vnd.adobe.air-application-installer-package+zip
fcdt application/vnd.adobe.formscentral.fcdt
fxp application/vnd.adobe.fxp
fxpl application/vnd.adobe.fxp
xdp application/vnd.adobe.xdp+xml
xfdf application/vnd.adobe.xfdf
ahead application/vnd.ahead.space
azf application/vnd.airzip.filesecure.azf
azs application/vnd.airzip.filesecure.azs
azw application/vnd.amazon.ebook
acc application/vnd.americandynamics.acc
ami application/vnd.amiga.ami
apk application/vnd.android.package-archive
cii application/vnd.anser-web-certificate-issue-initiation
fti application/vnd.anser-web-funds-transfer-initiation
atx application/vnd.antix.game-component
mpkg application/vnd.apple.installer+xml
m3u8 application/vnd.apple.mpegurl
swi application/vnd.aristanetworks.swi
iota application/vnd.astraea-software.iota
aep application/vnd.audiograph
mpm application/vnd.blueice.multipass
bmi application/vnd.bmi
rep application/vnd.businessobjects
cdxml application/vnd.chemdraw+xml
mmd application/vnd.chipnuts.karaoke-mmd
cdy application/vnd.cinderella
cla application/vnd.claymore
rp9 application/vnd.cloanto.rp9
c4g application/vnd.clonk.c4group
c4d application/vnd.clonk.c4group
c4f application/vnd.clonk.c4group
c4p application/vnd.clonk.c4group
c4u application/vnd.clonk.c4group
c11amc application/vnd.cluetrust.cartomobile-config
c11amz application/vnd.cluetrust.cartomobile-config-pkg
csp application/vnd.commonspace
cdbcmsg application/vnd.contact.cmsg
cmc application/vnd.cosmocaller
clkx application/vnd.crick.clicker
clkk application/vnd.crick.clicker.keyboard
clkp application/vnd.crick.clicker.palette
clkt application/vnd.crick.clicker.template
clkw application/vnd.crick.clicker.wordbank
wbs application/vnd.criticaltools.wbs+xml
pml application/vnd.ctc-posml
ppd application/vnd.cups-ppd
car application/vnd.curl.car
pcurl application/vnd.curl.pcurl
dart application/vnd.dart
rdz application/vnd.data-vision.rdz
uvf application/vnd.dece.data
uvvf application/vnd.dece.data
uvd application/vnd.dece.data
uvvd application/vnd.dece.data
uvt application/vnd.dece.ttml+xml
uvvt application/vnd.dece.ttml+xml
uvx application/vnd.dece.unspecified
uvvx application/vnd.dece.unspecified
uvz application/vnd.dece.zip
uvvz application/vnd.dece.zip
fe_launch application/vnd.denovo.fcselayout-link
dna application/vnd.dna
mlp application/vnd.dolby.mlp
dpg application/vnd.dpgraph
dfac application/vnd.dreamfactory
kpxx application/vnd.ds-keypoint
ait application/vnd.dvb.ait
svc application/vnd.dvb.service
geo application/vnd.dynageo
mag application/vnd.ecowin.chart
nml application/vnd.enliven
esf application/vnd.epson.esf
msf application/vnd.epson.msf
qam application/vnd.epson.quickanime
slt application/vnd.epson.salt
ssf application/vnd.epson.ssf
es3 application/vnd.eszigno3+xml
et3 application/vnd.eszigno3+xml
ez2 application/vnd.ezpix-album
ez3 application/vnd.ezpix-package
fdf application/vnd.fdf
mseed application/vnd.fdsn.mseed
seed application/vnd.fdsn.seed
dataless application/vnd.fdsn.seed
gph application/vnd.flographit
ftc application/vnd.fluxtime.clip
fm application/vnd.framemaker
frame application/vnd.framemaker
maker application/vnd.framemaker
book application/vnd.framemaker
fnc application/vnd.frogans.fnc
ltf application/vnd.frogans.ltf
fsc application/vnd.fsc.weblaunch
oas application/vnd.fujitsu.oasys
oa2 application/vnd.fujitsu.oasys2
oa3 application/vnd.fujitsu.oasys3
fg5 application/vnd.fujitsu.oasysgp
bh2 application/vnd.fujitsu.oasysprs
ddd application/vnd.fujixerox.ddd
xdw application/vnd.fujixerox.docuworks
xbd application/vnd.fujixerox.docuworks.binder
fzs application/vnd.fuzzysheet
txd application/vnd.genomatix.tuxedo
ggb application/vnd.geogebra.file
ggt application/vnd.geogebra.tool
gex application/vnd.geometry-explorer
gre application/vnd.geometry-explorer
gxt application/vnd.geonext
g2w application/vnd.geoplan
g3w application/vnd.geospace
gmx application/vnd.gmx
kml application/vnd.google-earth.kml+xml
kmz application/vnd.google-earth.kmz
gqf application/vnd.grafeq
gqs application/vnd.grafeq
gac application/vnd.groove-account
ghf application/vnd.groove-help
gim application/vnd.groove-identity-message
grv application/vnd.groove-injector
gtm application/vnd.groove-tool-message
tpl application/vnd.groove-tool-template
vcg application/vnd.groove-vcard
hal application/vnd.hal+xml
zmm application/vnd.handheld-entertainment+xml
hbci application/vnd.hbci
les application/vnd.hhe.lesson-player
hpgl application/vnd.hp-hpgl
hpid application/vnd.hp-hpid
hps application/vnd.hp-hps
jlt application/vnd.hp-jlyt
pcl application/vnd.hp-pcl
pclxl application/vnd.hp-pclxl
sfd-hdstx application/vnd.hydrostatix.sof-data
mpy application/vnd.ibm.minipay
afp application/vnd.ibm.modcap
listafp application/vnd.ibm.modcap
list3820 application/vnd.ibm.modcap
irm application/vnd.ibm.rights-management
sc application/vnd.ibm.secure-container
icc application/vnd.iccprofile
icm application/vnd.iccprofile
igl application/vnd.igloader
ivp application/vnd.immervision-ivp
ivu application/vnd.immervision-ivu
igm application/vnd.insors.igm
xpw application/vnd.intercon.formnet
xpx application/vnd.intercon.formnet
i2g application/vnd.intergeo
qbo application/vnd.intu.qbo
qfx application/vnd.intu.qfx
rcprofile application/vnd.ipunplugged.rcprofile
irp application/vnd.irepository.package+xml
xpr application/vnd.is-xpr
fcs application/vnd.isac.fcs
jam application/vnd.jam
rms application/vnd.jcp.javame.midlet-rms
jisp application/vnd.jisp
joda application/vnd.joost.joda-archive
ktz application/vnd.kahootz
ktr application/vnd.kahootz
karbon application/vnd.kde.karbon
chrt application/vnd.kde.kchart
kfo application/vnd.kde.kformula
flw application/vnd.kde.kivio
kon application/vnd.kde.kontour
kpr application/vnd.kde.kpresenter
kpt application/vnd.kde.kpresenter
ksp application/vnd.kde.kspread
kwd application/vnd.kde.kword
kwt application/vnd.kde.kword
htke application/vnd.kenameaapp
kia application/vnd.kidspiration
kne application/vnd.kinar
knp application/vnd.kinar
skp application/vnd.koan
skd application/vnd.koan
skt application/vnd.koan
skm application/vnd.koan
sse application/vnd.kodak-descriptor
lasxml application/vnd.las.las+xml
lbd application/vnd.llamagraphics.life-balance.desktop
lbe application/vnd.llamagraphics.life-balance.exchange+xml
123 application/vnd.lotus-1-2-3
apr application/vnd.lotus-approach
pre application/vnd.lotus-freelance
nsf application/vnd.lotus-notes
org application/vnd.lotus-organizer
scm application/vnd.lotus-screencam
lwp application/vnd.lotus-wordpro
portpkg application/vnd.macports.portpkg
mcd application/vnd.mcd
mc1 application/vnd.medcalcdata
cdkey application/vnd.mediastation.cdkey
mwf application/vnd.mfer
mfm application/vnd.mfmp
flo application/vnd.micrografx.flo
igx application/vnd.micrografx.igx
mif application/vnd.mif
daf application/vnd.mobius.daf
dis application/vnd.mobius.dis
mbk application/vnd.mobius.mbk
mqy application/vnd.mobius.mqy
msl application/vnd.mobius.msl
plc application/vnd.mobius.plc
txf application/vnd.mobius.txf
mpn application/vnd.mophun.application
mpc application/vnd.mophun.certificate
xul application/vnd.mozilla.xul+xml
cil application/vnd.ms-artgalry
cab application/vnd.ms-cab-compressed
xls application/vnd.ms-excel
xlm application/vnd.ms-excel
xla application/vnd.ms-excel
xlc application/vnd.ms-excel
xlt application/vnd.ms-excel
xlw application/vnd.ms-excel
xlam application/vnd.ms-excel.addin.macroenabled.12
xlsb application/vnd.ms-excel.sheet.binary.macroenabled.12
xlsm application/vnd.ms-excel.sheet.macroenabled.12
xltm application/vnd.ms-excel.template.macroenabled.12
eot application/vnd.ms-fontobject
chm application/vnd.ms-htmlhelp
ims application/vnd.ms-ims
lrm application/vnd.ms-lrm
thmx application/vnd.ms-officetheme
cat application/vnd.ms-pki.seccat
stl application/vnd.ms-pki.stl
ppt application/vnd.ms-powerpoint
pps application/vnd.ms-powerpoint
pot application/vnd.ms-powerpoint
ppam application/vnd.ms-powerpoint.addin.macroenabled.12
pptm application/vnd.ms-powerpoint.presentation.macroenabled.12
sldm application/vnd.ms-powerpoint.slide.macroenabled.12
ppsm application/vnd.ms-powerpoint.slideshow.macroenabled.12
potm application/vnd.ms-powerpoint.template.macroenabled.12
mpp application/vnd.ms-project
mpt application/vnd.ms-project
docm application/vnd.ms-word.document.macroenabled.12
dotm application/vnd.ms-word.template.macroenabled.12
wps application/vnd.ms-works
wks application/vnd.ms-works
wcm application/vnd.ms-works
wdb application/vnd.ms-works
wpl application/vnd.ms-wpl
xps application/vnd.ms-xpsdocument
mseq application/vnd.mseq
mus application/vnd.musician
msty application/vnd.muvee.style
taglet application/vnd.mynfc
nlu application/vnd.neurolanguage.nlu
ntf application/vnd.nitf
nitf application/vnd.nitf
nnd application/vnd.noblenet-directory
nns application/vnd.noblenet-sealer
nnw application/vnd.noblenet-web
ngdat application/vnd.nokia.n-gage.data
n-gage application/vnd.nokia.n-gage.symbian.install
rpst application/vnd.nokia.radio-preset
rpss application/vnd.nokia.radio-presets
edm application/vnd.novadigm.edm
edx application/vnd.novadigm.edx
ext application/vnd.novadigm.ext
odc application/vnd.oasis.opendocument.chart
otc application/vnd.oasis.opendocument.chart-template
odb application/vnd.oasis.opendocument.database
odf application/vnd.oasis.opendocument.formula
odft application/vnd.oasis.opendocument.formula-template
odg application/vnd.oasis.opendocument.graphics
otg application/vnd.oasis.opendocument.graphics-template
odi application/vnd.oasis.opendocument.image
oti application/vnd.oasis.opendocument.image-template
odp application/vnd.oasis.opendocument.presentation
otp application/vnd.oasis.opendocument.presentation-template
ods application/vnd.oasis.opendocument.spreadsheet
ots application/vnd.oasis.opendocument.spreadsheet-template
odt application/vnd.oasis.opendocument.text
odm application/vnd.oasis.opendocument.text-master
ott application/vnd.oasis.opendocument.text-template
oth application/vnd.oasis.opendocument.text-web
xo application/vnd.olpc-sugar
dd2 application/vnd.oma.dd2+xml
oxt application/vnd.openofficeorg.extension
pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
sldx application/vnd.openxmlformats-officedocument.presentationml.slide
ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
potx application/vnd.openxmlformats-officedocument.presentationml.template
xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
mgp application/vnd.osgeo.mapguide.package
dp application/vnd.osgi.dp
esa application/vnd.osgi.subsystem
pdb application/vnd.palm
pqa application/vnd.palm
oprc application/vnd.palm
paw application/vnd.pawaafile
str application/vnd.pg.format
ei6 application/vnd.pg.osasli
efif application/vnd.picsel
wg application/vnd.pmi.widget
plf application/vnd.pocketlearn
pbd application/vnd.powerbuilder6
box application/vnd.previewsystems.box
mgz application/vnd.proteus.magazine
qps application/vnd.publishare-delta-tree
ptid application/vnd.pvi.ptid1
qxd application/vnd.quark.quarkxpress
qxt application/vnd.quark.quarkxpress
qwd application/vnd.quark.quarkxpress
qwt application/vnd.quark.quarkxpress
qxl application/vnd.quark.quarkxpress
qxb application/vnd.quark.quarkxpress
bed application/vnd.realvnc.bed
mxl application/vnd.recordare.musicxml
musicxml application/vnd.recordare.musicxml+xml
cryptonote application/vnd.rig.cryptonote
cod application/vnd.rim.cod
rm application/vnd.rn-realmedia
rmvb application/vnd.rn-realmedia-vbr
link66 application/vnd.route66.link66+xml
st application/vnd.sailingtracker.track
see application/vnd.seemail
sema application/vnd.sema
semd application/vnd.semd
semf application/vnd.semf
ifm application/vnd.shana.informed.formdata
itp application/vnd.shana.informed.formtemplate
iif application/vnd.shana.informed.interchange
ipk application/vnd.shana.informed.package
twd application/vnd.simtech-mindmapper
twds application/vnd.simtech-mindmapper
mmf application/vnd.smaf
teacher application/vnd.smart.teacher
sdkm application/vnd.solent.sdkm+xml
sdkd application/vnd.solent.sdkm+xml
dxp application/vnd.spotfire.dxp
sfs application/vnd.spotfire.sfs
sdc application/vnd.stardivision.calc
sda application/vnd.stardivision.draw
sdd application/vnd.stardivision.impress
smf application/vnd.stardivision.math
sdw application/vnd.stardivision.writer
vor application/vnd.stardivision.writer
sgl application/vnd.stardivision.writer-global
smzip application/vnd.stepmania.package
sm application/vnd.stepmania.stepchart
sxc application/vnd.sun.xml.calc
stc application/vnd.sun.xml.calc.template
sxd application/vnd.sun.xml.draw
std application/vnd.sun.xml.draw.template
sxi application/vnd.sun.xml.impress
sti application/vnd.sun.xml.impress.template
sxm application/vnd.sun.xml.math
sxw application/vnd.sun.xml.writer
sxg application/vnd.sun.xml.writer.global
stw application/vnd.sun.xml.writer.template
sus application/vnd.sus-calendar
susp application/vnd.sus-calendar
svd application/vnd.svd
sis application/vnd.symbian.install
sisx application/vnd.symbian.install
xsm application/vnd.syncml+xml
bdm application/vnd.syncml.dm+wbxml
xdm application/vnd.syncml.dm+xml
tao application/vnd.tao.intent-module-archive
pcap application/vnd.tcpdump.pcap
cap application/vnd.tcpdump.pcap
dmp application/vnd.tcpdump.pcap
tmo application/vnd.tmobile-livetv
tpt application/vnd.trid.tpt
mxs application/vnd.triscape.mxs
tra application/vnd.trueapp
ufd application/vnd.ufdl
ufdl application/vnd.ufdl
utz application/vnd.uiq.theme
umj application/vnd.umajin
unityweb application/vnd.unity
uoml application/vnd.uoml+xml
vcx application/vnd.vcx
vsd application/vnd.visio
vst application/vnd.visio
vss application/vnd.visio
vsw application/vnd.visio
vis application/vnd.visionary
vsf application/vnd.vsf
wbxml application/vnd.wap.wbxml
wmlc application/vnd.wap.wmlc
wmlsc application/vnd.wap.wmlscriptc
wtb application/vnd.webturbo
nbp application/vnd.wolfram.player
wpd application/vnd.wordperfect
wqd application/vnd.wqd
stf application/vnd.wt.stf
xar application/vnd.xara
xfdl application/vnd.xfdl
hvd application/vnd.yamaha.hv-dic
hvs application/vnd.yamaha.hv-script
hvp application/vnd.yamaha.hv-voice
osf application/vnd.yamaha.openscoreformat
osfpvg application/vnd.yamaha.openscoreformat.osfpvg+xml
saf application/vnd.yamaha.smaf-audio
spf application/vnd.yamaha.smaf-phrase
cmp application/vnd.yellowriver-custom-menu
zir application/vnd.zul
zirz application/vnd.zul
zaz application/vnd.zzazz.deck+xml
vxml application/voicexml+xml
wgt application/widget
hlp application/winhlp
wsdl application/wsdl+xml
wspolicy application/wspolicy+xml
7z application/x-7z-compressed
abw application/x-abiword
ace application/x-ace-compressed
dmg application/x-apple-diskimage
aab application/x-authorware-bin
x32 application/x-authorware-bin
u32 application/x-authorware-bin
vox application/x-authorware-bin
aam application/x-authorware-map
aas application/x-authorware-seg
bcpio application/x-bcpio
torrent application/x-bittorrent
blb application/x-blorb
blorb application/x-blorb
bz application/x-bzip
bz2 application/x-bzip2
boz application/x-bzip2
cbr application/x-cbr
cba application/x-cbr
cbt application/x-cbr
cbz application/x-cbr
cb7 application/x-cbr
vcd application/x-cdlink
cfs application/x-cfs-compressed
chat application/x-chat
pgn application/x-chess-pgn
nsc application/x-conference
cpio application/x-cpio
csh application/x-csh
deb application/x-debian-package
udeb application/x-debian-package
dgc application/x-dgc-compressed
dir application/x-director
dcr application/x-director
dxr application/x-director
cst application/x-director
cct application/x-director
cxt application/x-director
w3d application/x-director
fgd application/x-director
swa application/x-director
wad application/x-doom
ncx application/x-dtbncx+xml
dtb application/x-dtbook+xml
res application/x-dtbresource+xml
dvi application/x-dvi
evy application/x-envoy
eva application/x-eva
bdf application/x-font-bdf
gsf application/x-font-ghostscript
psf application/x-font-linux-psf
otf application/x-font-otf
pcf application/x-font-pcf
snf application/x-font-snf
ttf application/x-font-ttf
ttc application/x-font-ttf
pfa application/x-font-type1
pfb application/x-font-type1
pfm application/x-font-type1
afm application/x-font-type1
arc application/x-freearc
spl application/x-futuresplash
gca application/x-gca-compressed
ulx application/x-glulx
gnumeric application/x-gnumeric
gramps application/x-gramps-xml
gtar application/x-gtar
hdf application/x-hdf
install application/x-install-instructions
iso application/x-iso9660-image
jnlp application/x-java-jnlp-file
latex application/x-latex
lzh application/x-lzh-compressed
lha application/x-lzh-compressed
mie application/x-mie
prc application/x-mobipocket-ebook
mobi application/x-mobipocket-ebook
application application/x-ms-application
lnk application/x-ms-shortcut
wmd application/x-ms-wmd
wmz application/x-ms-wmz
xbap application/x-ms-xbap
mdb application/x-msaccess
obd application/x-msbinder
crd application/x-mscardfile
clp application/x-msclip
exe application/x-msdownload
dll application/x-msdownload
com application/x-msdownload
bat application/x-msdownload
msi application/x-msdownload
mvb application/x-msmediaview
m13 application/x-msmediaview
m14 application/x-msmediaview
wmf application/x-msmetafile
emf application/x-msmetafile
emz application/x-msmetafile
mny application/x-msmoney
pub application/x-mspublisher
scd application/x-msschedule
trm application/x-msterminal
wri application/x-mswrite
nc application/x-netcdf
cdf application/x-netcdf
nzb application/x-nzb
p12 application/x-pkcs12
pfx application/x-pkcs12
p7b application/x-pkcs7-certificates
spc application/x-pkcs7-certificates
p7r application/x-pkcs7-certreqresp
rar application/x-rar-compressed
ris application/x-research-info-systems
sh application/x-sh
shar application/x-shar
swf application/x-shockwave-flash
xap application/x-silverlight-app
sql application/x-sql
sit application/x-stuffit
sitx application/x-stuffitx
srt application/x-subrip
sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc
t3 application/x-t3vm-image
gam application/x-tads
tar application/x-tar
tcl application/x-tcl
tex application/x-tex
tfm application/x-tex-tfm
texinfo application/x-texinfo
texi application/x-texinfo
obj application/x-tgif
ustar application/x-ustar
src application/x-wais-source
der application/x-x509-ca-cert
crt application/x-x509-ca-cert
fig application/x-xfig
xlf application/x-xliff+xml
xpi application/x-xpinstall
xz application/x-xz
z1 application/x-zmachine
z2 application/x-zmachine
z3 application/x-zmachine
z4 application/x-zmachine
z5 application/x-zmachine
z6 application/x-zmachine
z7 application/x-zmachine
z8 application/x-zmachine
xaml application/xaml+xml
xdf application/xcap-diff+xml
xenc application/xenc+xml
xhtml application/xhtml+xml
xht application/xhtml+xml
xml application/xml
xsl application/xml
dtd application/xml-dtd
xop application/xop+xml
xpl application/xproc+xml
xslt application/xslt+xml
xspf application/xspf+xml
mxml application/xv+xml
xhvml application/xv+xml
xvml application/xv+xml
xvm application/xv+xml
yang application/yang
yin application/yin+xml
zip application/zip
adp audio/adpcm
au audio/basic
snd audio/basic
mid audio/midi
midi audio/midi
kar audio/midi
rmi audio/midi
m4a audio/mp4
mp4a audio/mp4
mpga audio/mpeg
mp2 audio/mpeg
mp2a audio/mpeg
mp3 audio/mpeg
m2a audio/mpeg
m3a audio/mpeg
oga audio/ogg
ogg audio/ogg
spx audio/ogg
s3m audio/s3m
sil audio/silk
uva audio/vnd.dece.audio
uvva audio/vnd.dece.audio
eol audio/vnd.digital-winds
dra audio/vnd.dra
dts audio/vnd.dts
dtshd audio/vnd.dts.hd
lvp audio/vnd.lucent.voice
pya audio/vnd.ms-playready.media.pya
ecelp4800 audio/vnd.nuera.ecelp4800
ecelp7470 audio/vnd.nuera.ecelp7470
ecelp9600 audio/vnd.nuera.ecelp9600
rip audio/vnd.rip
weba audio/webm
aac audio/x-aac
aif audio/x-aiff
aiff audio/x-aiff
aifc audio/x-aiff
caf audio/x-caf
flac audio/x-flac
mka audio/x-matroska
m3u audio/x-mpegurl
wax audio/x-ms-wax
wma audio/x-ms-wma
ram audio/x-pn-realaudio
ra audio/x-pn-realaudio
rmp audio/x-pn-realaudio-plugin
wav audio/x-wav
xm audio/xm
cdx chemical/x-cdx
cif chemical/x-cif
cmdf chemical/x-cmdf
cml chemical/x-cml
csml chemical/x-csml
xyz chemical/x-xyz
bmp image/bmp
cgm image/cgm
g3 image/g3fax
gif image/gif
ief image/ief
jpeg image/jpeg
jpg image/jpeg
jpe image/jpeg
ktx image/ktx
png image/png
btif image/prs.btif
sgi image/sgi
svg image/svg+xml
svgz image/svg+xml
tiff image/tiff
tif image/tiff
psd image/vnd.adobe.photoshop
uvi image/vnd.dece.graphic
uvvi image/vnd.dece.graphic
uvg image/vnd.dece.graphic
uvvg image/vnd.dece.graphic
djvu image/vnd.djvu
djv image/vnd.djvu
sub image/vnd.dvb.subtitle
dwg image/vnd.dwg
dxf image/vnd.dxf
fbs image/vnd.fastbidsheet
fpx image/vnd.fpx
fst image/vnd.fst
mmr image/vnd.fujixerox.edmics-mmr
rlc image/vnd.fujixerox.edmics-rlc
mdi image/vnd.ms-modi
wdp image/vnd.ms-photo
npx image/vnd.net-fpx
wbmp image/vnd.wap.wbmp
xif image/vnd.xiff
webp image/webp
3ds image/x-3ds
ras image/x-cmu-raster
cmx image/x-cmx
fh image/x-freehand
fhc image/x-freehand
fh4 image/x-freehand
fh5 image/x-freehand
fh7 image/x-freehand
ico image/x-icon
sid image/x-mrsid-image
pcx image/x-pcx
pic image/x-pict
pct image/x-pict
pnm image/x-portable-anymap
pbm image/x-portable-bitmap
pgm image/x-portable-graymap
ppm image/x-portable-pixmap
rgb image/x-rgb
tga image/x-tga
xbm image/x-xbitmap
xpm image/x-xpixmap
xwd image/x-xwindowdump
eml message/rfc822
mime message/rfc822
igs model/iges
iges model/iges
msh model/mesh
mesh model/mesh
silo model/mesh
dae model/vnd.collada+xml
dwf model/vnd.dwf
gdl model/vnd.gdl
gtw model/vnd.gtw
mts model/vnd.mts
vtu model/vnd.vtu
wrl model/vrml
vrml model/vrml
x3db model/x3d+binary
x3dbz model/x3d+binary
x3dv model/x3d+vrml
x3dvz model/x3d+vrml
x3d model/x3d+xml
x3dz model/x3d+xml
appcache text/cache-manifest
ics text/calendar
ifb text/calendar
css text/css
csv text/csv
html text/html
htm text/html
n3 text/n3
txt text/plain
text text/plain
conf text/plain
def text/plain
list text/plain
log text/plain
in text/plain
dsc text/prs.lines.tag
rtx text/richtext
sgml text/sgml
sgm text/sgml
tsv text/tab-separated-values
t text/troff
tr text/troff
roff text/troff
man text/troff
me text/troff
ms text/troff
ttl text/turtle
uri text/uri-list
uris text/uri-list
urls text/uri-list
vcard text/vcard
curl text/vnd.curl
dcurl text/vnd.curl.dcurl
mcurl text/vnd.curl.mcurl
scurl text/vnd.curl.scurl
fly text/vnd.fly
flx text/vnd.fmi.flexstor
gv text/vnd.graphviz
3dml text/vnd.in3d.3dml
spot text/vnd.in3d.spot
jad text/vnd.sun.j2me.app-descriptor
wml text/vnd.wap.wml
wmls text/vnd.wap.wmlscript
s text/x-asm
asm text/x-asm
c text/x-c
cc text/x-c
cxx text/x-c
cpp text/x-c
h text/x-c
hh text/x-c
dic text/x-c
f text/x-fortran
for text/x-fortran
f77 text/x-fortran
f90 text/x-fortran
java text/x-java-source
nfo text/x-nfo
opml text/x-opml
p text/x-pascal
pas text/x-pascal
etx text/x-setext
sfv text/x-sfv
uu text/x-uuencode
vcs text/x-vcalendar
vcf text/x-vcard
3gp video/3gpp
3g2 video/3gpp2
h261 video/h261
h263 video/h263
h264 video/h264
jpgv video/jpeg
jpm video/jpm
jpgm video/jpm
mj2 video/mj2
mjp2 video/mj2
mp4 video/mp4
mp4v video/mp4
mpg4 video/mp4
mpeg video/mpeg
mpg video/mpeg
mpe video/mpeg
m1v video/mpeg
m2v video/mpeg
ogv video/ogg
qt video/quicktime
mov video/quicktime
uvh video/vnd.dece.hd
uvvh video/vnd.dece.hd
uvm video/vnd.dece.mobile
uvvm video/vnd.dece.mobile
uvp video/vnd.dece.pd
uvvp video/vnd.dece.pd
uvs video/vnd.dece.sd
uvvs video/vnd.dece.sd
uvv video/vnd.dece.video
uvvv video/vnd.dece.video
dvb video/vnd.dvb.file
fvt video/vnd.fvt
mxu video/vnd.mpegurl
m4u video/vnd.mpegurl
pyv video/vnd.ms-playready.media.pyv
uvu video/vnd.uvvu.mp4
uvvu video/vnd.uvvu.mp4
viv video/vnd.vivo
webm video/webm
f4v video/x-f4v
fli video/x-fli
flv video/x-flv
m4v video/x-m4v
mkv video/x-matroska
mk3d video/x-matroska
mks video/x-matroska
mng video/x-mng
asf video/x-ms-asf
asx video/x-ms-asf
vob video/x-ms-vob
wm video/x-ms-wm
wmv video/x-ms-wmv
wmx video/x-ms-wmx
wvx video/x-ms-wvx
avi video/x-msvideo
movie video/x-sgi-movie
smv video/x-smv
ice x-conference/x-cooltalk

如何获取文件的Content-Type

1、使用spring-web包下MediaTypeFactory

MediaTypeFactory是spring-web包下的工具类,需要在pom引用spring-web包,本例使用的是:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version> 2.2.4.RELEASE</version>
    </dependency>

从源码中可以看到MediaTypeFactory一共提供了三个对外方法,支持通过传入文件名或者Resource对象来获取Content-Type:

 public static Optional<MediaType> getMediaType(@Nullable Resource resource) {
        return Optional.ofNullable(resource).map(Resource::getFilename).flatMap(MediaTypeFactory::getMediaType);
    }

    public static Optional<MediaType> getMediaType(@Nullable String filename) {
        return getMediaTypes(filename).stream().findFirst();
    }

    public static List<MediaType> getMediaTypes(@Nullable String filename) {
        Optional var10000 = Optional.ofNullable(StringUtils.getFilenameExtension(filename)).map((s) -> {
            return s.toLowerCase(Locale.ENGLISH);
        });
        MultiValueMap var10001 = fileExtensionToMediaTypes;
        var10001.getClass();
        return (List)var10000.map(var10001::get).orElse(Collections.emptyList());
    }

我们用传入文件名的方式测试一下:

public static void main(String[] args) {
        MediaType mediaType = MediaTypeFactory.getMediaType("测试.pdf").get();
        String mediaTypeString = mediaType.toString();
        System.out.println(mediaTypeString);
    }

输出结果:

application/pdf

2、使用Apache Tika

Apache Tika 是一个内容分析工具包,可以检测上千种文件类型,并提取它们的元数据和文本。tika在设计上十分精巧,单一的接口使它易于使用,在搜索引擎索引,内容分析,翻译等诸多方面得到了广泛使用。

使用Apache Tika首先需要在pom引用:

 <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-core</artifactId>
      <version>1.28.4</version>
    </dependency>

获取Content-Type 主要是用到其中detect的通过源码我们可以得知(源码太长了就不放了)detect支持通过传入String(文件名)、URL、File、Path、byte[]、InputStream等类型来解析以获取Content-Type

我们用传入byte[]的方式测试一下:

public static void main(String[] args) {
        File file = new File("D:\\书籍\\电子书\\其它\\自然哲学的数学原理.pdf");
        byte[] fileContent = new byte[(int) file.length()];
        try (FileInputStream inputStream = new FileInputStream(file)) {
            inputStream.read(fileContent);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Tika tika = new Tika();
        String mediaTypeString = tika.detect(fileContent);
        System.out.println(mediaTypeString);
    }

输出结果:

application/pdf

注意tika.detect返回的是String类型,如果想像第一种方式一样得到MediaType对象,还需要转换一下。

 MediaType.parseMediaType(mediaTypeString);