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 '.ief':'image/ief',
55 '.iges':'model/iges',
56 '.igs':'model/iges',
57 '.ips':'application/x-ipscript',
58 '.ipx':'application/x-ipix',
59 '.jpe':'image/jpeg',
60 '.jpeg':'image/jpeg',
61 '.jpg':'image/jpeg',
62 '.js':'application/x-javascript',
63 '.kar':'audio/midi',
64 '.latex':'application/x-latex',
65 '.lha':'application/octet-stream',
66 '.lsp':'application/x-lisp',
67 '.lzh':'application/octet-stream',
68 '.m':'text/plain',
69 '.man':'application/x-troff-man',
70 '.me':'application/x-troff-me',
71 '.mesh':'model/mesh',
72 '.mid':'audio/midi',
73 '.midi':'audio/midi',
74 '.mif':'application/vnd.mif',
75 '.mime':'www/mime',
76 '.mov':'video/quicktime',
77 '.movie':'video/x-sgi-movie',
78 '.mp2':'audio/mpeg',
79 '.mp3':'audio/mpeg',
80 '.mpe':'video/mpeg',
81 '.mpeg':'video/mpeg',
82 '.mpg':'video/mpeg',
83 '.mpga':'audio/mpeg',
84 '.ms':'application/x-troff-ms',
85 '.msh':'model/mesh',
86 '.nc':'application/x-netcdf',
87 '.oda':'application/oda',
88 '.pbm':'image/x-portable-bitmap',
89 '.pdb':'chemical/x-pdb',
90 '.pdf':'application/pdf',
91 '.pgm':'image/x-portable-graymap',
92 '.pgn':'application/x-chess-pgn',
93 '.png':'image/png',
94 '.pnm':'image/x-portable-anymap',
95 '.pot':'application/mspowerpoint',
96 '.ppm':'image/x-portable-pixmap',
97 '.pps':'application/mspowerpoint',
98 '.ppt':'application/mspowerpoint',
99 '.ppz':'application/mspowerpoint',
100 '.pre':'application/x-freelance',
101 '.prt':'application/pro_eng',
102 '.ps':'application/postscript',
103 '.qt':'video/quicktime',
104 '.ra':'audio/x-realaudio',
105 '.ram':'audio/x-pn-realaudio',
106 '.ras':'image/cmu-raster',
107 '.rgb':'image/x-rgb',
108 '.rm':'audio/x-pn-realaudio',
109 '.roff':'application/x-troff',
110 '.rpm':'audio/x-pn-realaudio-plugin',
111 '.rtf':'text/rtf',
112 '.rtx':'text/richtext',
113 '.scm':'application/x-lotusscreencam',
114 '.set':'application/set',
115 '.sgm':'text/sgml',
116 '.sgml':'text/sgml',
117 '.sh':'application/x-sh',
118 '.shar':'application/x-shar',
119 '.silo':'model/mesh',
120 '.sit':'application/x-stuffit',
121 '.skd':'application/x-koan',
122 '.skm':'application/x-koan',
123 '.skp':'application/x-koan',
124 '.skt':'application/x-koan',
125 '.smi':'application/smil',
126 '.smil':'application/smil',
127 '.snd':'audio/basic',
128 '.sol':'application/solids',
129 '.spl':'application/x-futuresplash',
130 '.src':'application/x-wais-source',
131 '.step':'application/STEP',
132 '.stl':'application/SLA',
133 '.stp':'application/STEP',
134 '.sv4cpio':'application/x-sv4cpio',
135 '.sv4crc':'application/x-sv4crc',
136 '.swf':'application/x-shockwave-flash',
137 '.t':'application/x-troff',
138 '.tar':'application/x-tar',
139 '.tcl':'application/x-tcl',
140 '.tex':'application/x-tex',
141 '.texi':'application/x-texinfo',
142 '.tif':'image/tiff',
143 '.tiff':'image/tiff',
144 '.tr':'application/x-troff',
145 '.tsi':'audio/TSP-audio',
146 '.tsp':'application/dsptype',
147 '.tsv':'text/tab-separated-values',
148 '.txt':'text/plain',
149 '.unv':'application/i-deas',
150 '.ustar':'application/x-ustar',
151 '.vcd':'application/x-cdlink',
152 '.vda':'application/vda',
153 '.viv':'video/vnd.vivo',
154 '.vivo':'video/vnd.vivo',
155 '.vrml':'model/vrml',
156 '.wav':'audio/x-wav',
157 '.wrl':'model/vrml',
158 '.xbm':'image/x-xbitmap',
159 '.xlc':'application/vnd.ms-excel',
160 '.xll':'application/vnd.ms-excel',
161 '.xlm':'application/vnd.ms-excel',
162 '.xls':'application/vnd.ms-excel',
163 '.xlw':'application/vnd.ms-excel',
164 '.xml':'text/xml',
165 '.xpm':'image/x-xpixmap',
166 '.xsl':'application/xml',
167 '.xwd':'image/x-xwindowdump',
168 '.xyz':'chemical/x-pdb',
169 '.zip':'application/zip'}
170
171 -def contenttype(filename):
172 """
173 returns the Content-Type: string given the extension in the filename.
174 """
175 i=filename.rfind('.')
176 if i<0: return 'text/plain'
177 try: return CONTENT_TYPE[filename[i:].lower()]
178 except KeyError: return 'text/plain'
179