Introduction
This code example uses API to access MIME information in the file header. One interesting point is that it will work for files that have no file extension. Code is current 2008 VB\C#.
Background
More information on MIME can be found here and at REGEDIT.EXE HKEY_CLASSES_ROOT\MIME\Database\Content Type\.
Using the Code
Simply call the function like so:
Me.TextBox2.Text = getMimeFromFile(Me.TextBox1.Text)
Public Declare Function FindMimeFromData Lib "urlmon.dll" (ByVal pBC As IntPtr, _
<MarshalAs(UnmanagedType.LPWStr)> ByVal pwzUrl As String, _
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I1, _
SizeParamIndex:=3)> ByVal pBuffer As Byte(), ByVal cbSize As Integer, _
<MarshalAs(UnmanagedType.LPWStr)> ByVal pwzMimeProposed As String, _
ByVal dwMimeFlags As Integer, <MarshalAs(UnmanagedType.LPWStr)> _
ByRef ppwzMimeOut As String, ByVal dwReserved As Integer) As Integer
Public Function getMimeFromFile(ByVal file As String) As String
Dim mimeout As String = ""
Dim MaxContent As Integer
Dim fs As FileStream
Dim buf() As Byte
Dim result As String
If Not System.IO.File.Exists(file) _
Then Throw New FileNotFoundException(file + " not found")
If MaxContent > 4096 Then MaxContent = 4096
MaxContent = CInt(New FileInfo(file).Length)
fs = New FileStream(file, FileMode.Open)
ReDim buf(MaxContent)
fs.Read(buf, 0, MaxContent)
fs.Close()
result = FindMimeFromData(IntPtr.Zero, file, buf, MaxContent, Nothing, 0, mimeout, 0)
Return mimeout
End Function
End Module
Points of Interest
A list of MIME type can be found here.
Ext. | MIME type
ai application/postscript
aif audio/x-aiff
aifc audio/x-aiff
aiff audio/x-aiff
asc text/plain
atom application/atom+xml
au audio/basic
avi video/x-msvideo
bcpio application/x-bcpio
bin application/octet-stream
bmp image/bmp
cdf application/x-netcdf
cgm image/cgm
class application/octet-stream
cpio application/x-cpio
cpt application/mac-compactpro
csh application/x-csh
css text/css
dcr application/x-director
dif video/x-dv
dir application/x-director
djv image/vnd.djvu
djvu image/vnd.djvu
dll application/octet-stream
dmg application/octet-stream
dms application/octet-stream
doc application/msword
dtd application/xml-dtd
dv video/x-dv
dvi application/x-dvi
dxr application/x-director
eps application/postscript
etx text/x-setext
exe application/octet-stream
ez application/andrew-inset
gif image/gif
gram application/srgs
grxml application/srgs+xml
gtar application/x-gtar
hdf application/x-hdf
hqx application/mac-binhex40
htm text/html
html text/html
ice x-conference/x-cooltalk
ico image/x-icon
ics text/calendar
ief image/ief
ifb text/calendar
iges model/iges
igs model/iges
jnlp application/x-java-jnlp-file
jp2 image/jp2
jpe image/jpeg
jpeg image/jpeg
jpg image/jpeg
js application/x-javascript
kar audio/midi
latex application/x-latex
lha application/octet-stream
lzh application/octet-stream
m3u audio/x-mpegurl
m4a audio/mp4a-latm
m4b audio/mp4a-latm
m4p audio/mp4a-latm
m4u video/vnd.mpegurl
m4v video/x-m4v
mac image/x-macpaint
man application/x-troff-man
mathml application/mathml+xml
me application/x-troff-me
mesh model/mesh
mid audio/midi
midi audio/midi
mif application/vnd.mif
mov video/quicktime
movie video/x-sgi-movie
mp2 audio/mpeg
mp3 audio/mpeg
mp4 video/mp4
mpe video/mpeg
mpeg video/mpeg
mpg video/mpeg
mpga audio/mpeg
ms application/x-troff-ms
msh model/mesh
mxu video/vnd.mpegurl
nc application/x-netcdf
oda application/oda
ogg application/ogg
pbm image/x-portable-bitmap
pct image/pict
pdb chemical/x-pdb
pdf application/pdf
pgm image/x-portable-graymap
pgn application/x-chess-pgn
pic image/pict
pict image/pict
png image/png
pnm image/x-portable-anymap
pnt image/x-macpaint
pntg image/x-macpaint
ppm image/x-portable-pixmap
ppt application/vnd.ms-powerpoint
ps application/postscript
qt video/quicktime
qti image/x-quicktime
qtif image/x-quicktime
ra audio/x-pn-realaudio
ram audio/x-pn-realaudio
ras image/x-cmu-raster
rdf application/rdf+xml
rgb image/x-rgb
rm application/vnd.rn-realmedia
roff application/x-troff
rtf text/rtf
rtx text/richtext
sgm text/sgml
sgml text/sgml
sh application/x-sh
shar application/x-shar
silo model/mesh
sit application/x-stuffit
skd application/x-koan
skm application/x-koan
skp application/x-koan
skt application/x-koan
smi application/smil
smil application/smil
snd audio/basic
so application/octet-stream
spl application/x-futuresplash
src application/x-wais-source
sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc
svg image/svg+xml
swf application/x-shockwave-flash
t application/x-troff
tar application/x-tar
tcl application/x-tcl
tex application/x-tex
texi application/x-texinfo
texinfo application/x-texinfo
tif image/tiff
tiff image/tiff
tr application/x-troff
tsv text/tab-separated-values
txt text/plain
ustar application/x-ustar
vcd application/x-cdlink
vrml model/vrml
vxml application/voicexml+xml
wav audio/x-wav
wbmp image/vnd.wap.wbmp
wbmxl application/vnd.wap.wbxml
wml text/vnd.wap.wml
wmlc application/vnd.wap.wmlc
wmls text/vnd.wap.wmlscript
wmlsc application/vnd.wap.wmlscriptc
wrl model/vrml
xbm image/x-xbitmap
xht application/xhtml+xml
xhtml application/xhtml+xml
xls application/vnd.ms-excel
xml application/xml
xpm image/x-xpixmap
xsl application/xml
xslt application/xslt+xml
xul application/vnd.mozilla.xul+xml
xwd image/x-xwindowdump
xyz chemical/x-xyz
zip application/zip
History
- 8-Dec-2008 - First version submitted