1 """
2 This file is part of web2py Web Framework (Copyrighted, 2007)
3 Developed by Massimo Di Pierro <mdipierro@cs.depaul.edu>
4 License: GPL v2
5 """
6
7 __all__=['contentype']
8
9 CONTENT_TYPE={'.ai':'application/postscript',
10 '.aif':'audio/x-aiff',
11 '.aifc':'audio/x-aiff',
12 '.aiff':'audio/x-aiff',
13 '.asc':'text/plain',
14 '.au':'audio/basic',
15 '.avi':'video/x-msvideo',
16 '.bcpio':'application/x-bcpio',
17 '.bin':'application/octet-stream',
18 '.c':'text/plain',
19 '.cc':'text/plain',
20 '.ccad':'application/clariscad',
21 '.cdf':'application/x-netcdf',
22 '.class':'application/octet-stream',
23 '.cpio':'application/x-cpio',
24 '.cpt':'application/mac-compactpro',
25 '.csh':'application/x-csh',
26 '.css':'text/css',
27 '.csv':'text/csv',
28 '.dcr':'application/x-director',
29 '.dir':'application/x-director',
30 '.dms':'application/octet-stream',
31 '.doc':'application/msword',
32 '.drw':'application/drafting',
33 '.dvi':'application/x-dvi',
34 '.dwg':'application/acad',
35 '.dxf':'application/dxf',
36 '.dxr':'application/x-director',
37 '.eps':'application/postscript',
38 '.etx':'text/x-setext',
39 '.exe':'application/octet-stream',
40 '.ez':'application/andrew-inset',
41 '.f':'text/plain',
42 '.f90':'text/plain',
43 '.fli':'video/x-fli',
44 '.gif':'image/gif',
45 '.gtar':'application/x-gtar',
46 '.gz':'application/x-gzip',
47 '.h':'text/plain',
48 '.hdf':'application/x-hdf',
49 '.hh':'text/plain',
50 '.hqx':'application/mac-binhex40',
51 '.htm':'text/html',
52 '.html':'text/html',
53 '.ice':'x-conference/x-cooltalk',
54 '.ico':'image/vnd.microsoft.icon',
55 '.ief':'image/ief',
56 '.iges':'model/iges',
57 '.igs':'model/iges',
58 '.ips':'application/x-ipscript',
59 '.ipx':'application/x-ipix',
60 '.jpe':'image/jpeg',
61 '.jpeg':'image/jpeg',
62 '.jpg':'image/jpeg',
63 '.js':'application/x-javascript',
64 '.kar':'audio/midi',
65 '.latex':'application/x-latex',
66 '.lha':'application/octet-stream',
67 '.lsp':'application/x-lisp',
68 '.lzh':'application/octet-stream',
69 '.m':'text/plain',
70 '.man':'application/x-troff-man',
71 '.me':'application/x-troff-me',
72 '.mesh':'model/mesh',
73 '.mid':'audio/midi',
74 '.midi':'audio/midi',
75 '.mif':'application/vnd.mif',
76 '.mime':'www/mime',
77 '.mov':'video/quicktime',
78 '.movie':'video/x-sgi-movie',
79 '.mp2':'audio/mpeg',
80 '.mp3':'audio/mpeg',
81 '.mpe':'video/mpeg',
82 '.mpeg':'video/mpeg',
83 '.mpg':'video/mpeg',
84 '.mpga':'audio/mpeg',
85 '.ms':'application/x-troff-ms',
86 '.msh':'model/mesh',
87 '.nc':'application/x-netcdf',
88 '.oda':'application/oda',
89 '.pbm':'image/x-portable-bitmap',
90 '.pdb':'chemical/x-pdb',
91 '.pdf':'application/pdf',
92 '.pgm':'image/x-portable-graymap',
93 '.pgn':'application/x-chess-pgn',
94 '.png':'image/png',
95 '.pnm':'image/x-portable-anymap',
96 '.pot':'application/mspowerpoint',
97 '.ppm':'image/x-portable-pixmap',
98 '.pps':'application/mspowerpoint',
99 '.ppt':'application/mspowerpoint',
100 '.ppz':'application/mspowerpoint',
101 '.pre':'application/x-freelance',
102 '.prt':'application/pro_eng',
103 '.ps':'application/postscript',
104 '.qt':'video/quicktime',
105 '.ra':'audio/x-realaudio',
106 '.ram':'audio/x-pn-realaudio',
107 '.ras':'image/cmu-raster',
108 '.rgb':'image/x-rgb',
109 '.rm':'audio/x-pn-realaudio',
110 '.roff':'application/x-troff',
111 '.rpm':'audio/x-pn-realaudio-plugin',
112 '.rtf':'text/rtf',
113 '.rtx':'text/richtext',
114 '.scm':'application/x-lotusscreencam',
115 '.set':'application/set',
116 '.sgm':'text/sgml',
117 '.sgml':'text/sgml',
118 '.sh':'application/x-sh',
119 '.shar':'application/x-shar',
120 '.silo':'model/mesh',
121 '.sit':'application/x-stuffit',
122 '.skd':'application/x-koan',
123 '.skm':'application/x-koan',
124 '.skp':'application/x-koan',
125 '.skt':'application/x-koan',
126 '.smi':'application/smil',
127 '.smil':'application/smil',
128 '.snd':'audio/basic',
129 '.sol':'application/solids',
130 '.spl':'application/x-futuresplash',
131 '.src':'application/x-wais-source',
132 '.step':'application/STEP',
133 '.stl':'application/SLA',
134 '.stp':'application/STEP',
135 '.sv4cpio':'application/x-sv4cpio',
136 '.sv4crc':'application/x-sv4crc',
137 '.swf':'application/x-shockwave-flash',
138 '.t':'application/x-troff',
139 '.tar':'application/x-tar',
140 '.tcl':'application/x-tcl',
141 '.tex':'application/x-tex',
142 '.texi':'application/x-texinfo',
143 '.tif':'image/tiff',
144 '.tiff':'image/tiff',
145 '.tr':'application/x-troff',
146 '.tsi':'audio/TSP-audio',
147 '.tsp':'application/dsptype',
148 '.tsv':'text/tab-separated-values',
149 '.txt':'text/plain',
150 '.unv':'application/i-deas',
151 '.ustar':'application/x-ustar',
152 '.vcd':'application/x-cdlink',
153 '.vda':'application/vda',
154 '.viv':'video/vnd.vivo',
155 '.vivo':'video/vnd.vivo',
156 '.vrml':'model/vrml',
157 '.wav':'audio/x-wav',
158 '.wrl':'model/vrml',
159 '.xbm':'image/x-xbitmap',
160 '.xlc':'application/vnd.ms-excel',
161 '.xll':'application/vnd.ms-excel',
162 '.xlm':'application/vnd.ms-excel',
163 '.xls':'application/vnd.ms-excel',
164 '.xlw':'application/vnd.ms-excel',
165 '.xml':'text/xml',
166 '.xpm':'image/x-xpixmap',
167 '.xsl':'application/xml',
168 '.xwd':'image/x-xwindowdump',
169 '.xyz':'chemical/x-pdb',
170 '.zip':'application/zip'}
171
172 -def contenttype(filename):
173 """
174 returns the Content-Type: string given the extension in the filename.
175 """
176 i=filename.rfind('.')
177 if i<0: return 'text/plain'
178 try: return CONTENT_TYPE[filename[i:].lower()]
179 except KeyError: return 'text/plain'
180