1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
26:
27: 28: 29: 30: 31: 32: 33:
34: class Mage_Downloadable_Helper_File extends Mage_Core_Helper_Abstract
35: {
36: public function __construct()
37: {
38: $nodes = Mage::getConfig()->getNode('global/mime/types');
39: if ($nodes) {
40: $nodes = (array)$nodes;
41: foreach ($nodes as $key => $value) {
42: self::$_mimeTypes[$key] = $value;
43: }
44: }
45: }
46:
47: 48: 49: 50: 51: 52: 53: 54:
55: public function moveFileFromTmp($baseTmpPath, $basePath, $file)
56: {
57: if (isset($file[0])) {
58: $fileName = $file[0]['file'];
59: if ($file[0]['status'] == 'new') {
60: try {
61: $fileName = $this->_moveFileFromTmp(
62: $baseTmpPath, $basePath, $file[0]['file']
63: );
64: } catch (Exception $e) {
65: Mage::throwException(Mage::helper('downloadable')->__('An error occurred while saving the file(s).'));
66: }
67: }
68: return $fileName;
69: }
70: return '';
71: }
72:
73: 74: 75: 76: 77: 78: 79: 80:
81: protected function _moveFileFromTmp($baseTmpPath, $basePath, $file)
82: {
83: $ioObject = new Varien_Io_File();
84: $destDirectory = dirname($this->getFilePath($basePath, $file));
85: try {
86: $ioObject->open(array('path'=>$destDirectory));
87: } catch (Exception $e) {
88: $ioObject->mkdir($destDirectory, 0777, true);
89: $ioObject->open(array('path'=>$destDirectory));
90: }
91:
92: if (strrpos($file, '.tmp') == strlen($file)-4) {
93: $file = substr($file, 0, strlen($file)-4);
94: }
95:
96: $destFile = dirname($file) . $ioObject->dirsep()
97: . Mage_Core_Model_File_Uploader::getNewFileName($this->getFilePath($basePath, $file));
98:
99: Mage::helper('core/file_storage_database')->copyFile(
100: $this->getFilePath($baseTmpPath, $file),
101: $this->getFilePath($basePath, $destFile)
102: );
103:
104: $result = $ioObject->mv(
105: $this->getFilePath($baseTmpPath, $file),
106: $this->getFilePath($basePath, $destFile)
107: );
108: return str_replace($ioObject->dirsep(), '/', $destFile);
109: }
110:
111: 112: 113: 114: 115: 116: 117:
118: public function getFilePath($path, $file)
119: {
120: $file = $this->_prepareFileForPath($file);
121:
122: if(substr($file, 0, 1) == DS) {
123: return $path . DS . substr($file, 1);
124: }
125:
126: return $path . DS . $file;
127: }
128:
129: 130: 131: 132: 133: 134:
135: protected function _prepareFileForPath($file)
136: {
137: return str_replace('/', DS, $file);
138: }
139:
140: 141: 142: 143: 144: 145:
146: public function getFileFromPathFile($pathFile)
147: {
148: $file = '';
149:
150: $file = substr($pathFile, strrpos($this->_prepareFileForPath($pathFile), DS)+1);
151:
152: return $file;
153: }
154:
155: public function getFileType($filePath)
156: {
157: $ext = substr($filePath, strrpos($filePath, '.')+1);
158: return $this->_getFileTypeByExt($ext);
159: }
160:
161: protected function _getFileTypeByExt($ext)
162: {
163: $type = 'x' . $ext;
164: if (isset(self::$_mimeTypes[$type])) {
165: return self::$_mimeTypes[$type];
166: }
167: return 'application/octet-stream';
168: }
169:
170: public function getAllFileTypes()
171: {
172: return array_values(self::getAllMineTypes());
173: }
174:
175: public function getAllMineTypes()
176: {
177: return self::$_mimeTypes;
178: }
179:
180: protected static $_mimeTypes =
181: array(
182: 'x123' => 'application/vnd.lotus-1-2-3',
183: 'x3dml' => 'text/vnd.in3d.3dml',
184: 'x3g2' => 'video/3gpp2',
185: 'x3gp' => 'video/3gpp',
186: 'xace' => 'application/x-ace-compressed',
187: 'xacu' => 'application/vnd.acucobol',
188: 'xaep' => 'application/vnd.audiograph',
189: 'xai' => 'application/postscript',
190: 'xaif' => 'audio/x-aiff',
191:
192: 'xaifc' => 'audio/x-aiff',
193: 'xaiff' => 'audio/x-aiff',
194: 'xami' => 'application/vnd.amiga.ami',
195: 'xapr' => 'application/vnd.lotus-approach',
196: 'xasf' => 'video/x-ms-asf',
197: 'xaso' => 'application/vnd.accpac.simply.aso',
198: 'xasx' => 'video/x-ms-asf',
199: 'xatom' => 'application/atom+xml',
200: 'xatomcat' => 'application/atomcat+xml',
201:
202: 'xatomsvc' => 'application/atomsvc+xml',
203: 'xatx' => 'application/vnd.antix.game-component',
204: 'xau' => 'audio/basic',
205: 'xavi' => 'video/x-msvideo',
206: 'xbat' => 'application/x-msdownload',
207: 'xbcpio' => 'application/x-bcpio',
208: 'xbdm' => 'application/vnd.syncml.dm+wbxml',
209: 'xbh2' => 'application/vnd.fujitsu.oasysprs',
210: 'xbmi' => 'application/vnd.bmi',
211:
212: 'xbmp' => 'image/bmp',
213: 'xbox' => 'application/vnd.previewsystems.box',
214: 'xboz' => 'application/x-bzip2',
215: 'xbtif' => 'image/prs.btif',
216: 'xbz' => 'application/x-bzip',
217: 'xbz2' => 'application/x-bzip2',
218: 'xcab' => 'application/vnd.ms-cab-compressed',
219: 'xccxml' => 'application/ccxml+xml',
220: 'xcdbcmsg' => 'application/vnd.contact.cmsg',
221:
222: 'xcdkey' => 'application/vnd.mediastation.cdkey',
223: 'xcdx' => 'chemical/x-cdx',
224: 'xcdxml' => 'application/vnd.chemdraw+xml',
225: 'xcdy' => 'application/vnd.cinderella',
226: 'xcer' => 'application/pkix-cert',
227: 'xcgm' => 'image/cgm',
228: 'xchat' => 'application/x-chat',
229: 'xchm' => 'application/vnd.ms-htmlhelp',
230: 'xchrt' => 'application/vnd.kde.kchart',
231:
232: 'xcif' => 'chemical/x-cif',
233: 'xcii' => 'application/vnd.anser-web-certificate-issue-initiation',
234: 'xcil' => 'application/vnd.ms-artgalry',
235: 'xcla' => 'application/vnd.claymore',
236: 'xclkk' => 'application/vnd.crick.clicker.keyboard',
237: 'xclkp' => 'application/vnd.crick.clicker.palette',
238: 'xclkt' => 'application/vnd.crick.clicker.template',
239: 'xclkw' => 'application/vnd.crick.clicker.wordbank',
240: 'xclkx' => 'application/vnd.crick.clicker',
241:
242: 'xclp' => 'application/x-msclip',
243: 'xcmc' => 'application/vnd.cosmocaller',
244: 'xcmdf' => 'chemical/x-cmdf',
245: 'xcml' => 'chemical/x-cml',
246: 'xcmp' => 'application/vnd.yellowriver-custom-menu',
247: 'xcmx' => 'image/x-cmx',
248: 'xcom' => 'application/x-msdownload',
249: 'xconf' => 'text/plain',
250: 'xcpio' => 'application/x-cpio',
251:
252: 'xcpt' => 'application/mac-compactpro',
253: 'xcrd' => 'application/x-mscardfile',
254: 'xcrl' => 'application/pkix-crl',
255: 'xcrt' => 'application/x-x509-ca-cert',
256: 'xcsh' => 'application/x-csh',
257: 'xcsml' => 'chemical/x-csml',
258: 'xcss' => 'text/css',
259: 'xcsv' => 'text/csv',
260: 'xcurl' => 'application/vnd.curl',
261:
262: 'xcww' => 'application/prs.cww',
263: 'xdaf' => 'application/vnd.mobius.daf',
264: 'xdavmount' => 'application/davmount+xml',
265: 'xdd2' => 'application/vnd.oma.dd2+xml',
266: 'xddd' => 'application/vnd.fujixerox.ddd',
267: 'xdef' => 'text/plain',
268: 'xder' => 'application/x-x509-ca-cert',
269: 'xdfac' => 'application/vnd.dreamfactory',
270: 'xdis' => 'application/vnd.mobius.dis',
271:
272: 'xdjv' => 'image/vnd.djvu',
273: 'xdjvu' => 'image/vnd.djvu',
274: 'xdll' => 'application/x-msdownload',
275: 'xdna' => 'application/vnd.dna',
276: 'xdoc' => 'application/msword',
277: 'xdot' => 'application/msword',
278: 'xdp' => 'application/vnd.osgi.dp',
279: 'xdpg' => 'application/vnd.dpgraph',
280: 'xdsc' => 'text/prs.lines.tag',
281:
282: 'xdtd' => 'application/xml-dtd',
283: 'xdvi' => 'application/x-dvi',
284: 'xdwf' => 'model/vnd.dwf',
285: 'xdwg' => 'image/vnd.dwg',
286: 'xdxf' => 'image/vnd.dxf',
287: 'xdxp' => 'application/vnd.spotfire.dxp',
288: 'xecelp4800' => 'audio/vnd.nuera.ecelp4800',
289: 'xecelp7470' => 'audio/vnd.nuera.ecelp7470',
290: 'xecelp9600' => 'audio/vnd.nuera.ecelp9600',
291:
292: 'xecma' => 'application/ecmascript',
293: 'xedm' => 'application/vnd.novadigm.edm',
294: 'xedx' => 'application/vnd.novadigm.edx',
295: 'xefif' => 'application/vnd.picsel',
296: 'xei6' => 'application/vnd.pg.osasli',
297: 'xeml' => 'message/rfc822',
298: 'xeol' => 'audio/vnd.digital-winds',
299: 'xeot' => 'application/vnd.ms-fontobject',
300: 'xeps' => 'application/postscript',
301:
302: 'xesf' => 'application/vnd.epson.esf',
303: 'xetx' => 'text/x-setext',
304: 'xexe' => 'application/x-msdownload',
305: 'xext' => 'application/vnd.novadigm.ext',
306: 'xez' => 'application/andrew-inset',
307: 'xez2' => 'application/vnd.ezpix-album',
308: 'xez3' => 'application/vnd.ezpix-package',
309: 'xfbs' => 'image/vnd.fastbidsheet',
310: 'xfdf' => 'application/vnd.fdf',
311:
312: 'xfe_launch' => 'application/vnd.denovo.fcselayout-link',
313: 'xfg5' => 'application/vnd.fujitsu.oasysgp',
314: 'xfli' => 'video/x-fli',
315: 'xflo' => 'application/vnd.micrografx.flo',
316: 'xflw' => 'application/vnd.kde.kivio',
317: 'xflx' => 'text/vnd.fmi.flexstor',
318: 'xfly' => 'text/vnd.fly',
319: 'xfnc' => 'application/vnd.frogans.fnc',
320: 'xfpx' => 'image/vnd.fpx',
321:
322: 'xfsc' => 'application/vnd.fsc.weblaunch',
323: 'xfst' => 'image/vnd.fst',
324: 'xftc' => 'application/vnd.fluxtime.clip',
325: 'xfti' => 'application/vnd.anser-web-funds-transfer-initiation',
326: 'xfvt' => 'video/vnd.fvt',
327: 'xfzs' => 'application/vnd.fuzzysheet',
328: 'xg3' => 'image/g3fax',
329: 'xgac' => 'application/vnd.groove-account',
330: 'xgdl' => 'model/vnd.gdl',
331:
332: 'xghf' => 'application/vnd.groove-help',
333: 'xgif' => 'image/gif',
334: 'xgim' => 'application/vnd.groove-identity-message',
335: 'xgph' => 'application/vnd.flographit',
336: 'xgram' => 'application/srgs',
337: 'xgrv' => 'application/vnd.groove-injector',
338: 'xgrxml' => 'application/srgs+xml',
339: 'xgtar' => 'application/x-gtar',
340: 'xgtm' => 'application/vnd.groove-tool-message',
341:
342: 'xgtw' => 'model/vnd.gtw',
343: 'xh261' => 'video/h261',
344: 'xh263' => 'video/h263',
345: 'xh264' => 'video/h264',
346: 'xhbci' => 'application/vnd.hbci',
347: 'xhdf' => 'application/x-hdf',
348: 'xhlp' => 'application/winhlp',
349: 'xhpgl' => 'application/vnd.hp-hpgl',
350: 'xhpid' => 'application/vnd.hp-hpid',
351:
352: 'xhps' => 'application/vnd.hp-hps',
353: 'xhqx' => 'application/mac-binhex40',
354: 'xhtke' => 'application/vnd.kenameaapp',
355: 'xhtm' => 'text/html',
356: 'xhtml' => 'text/html',
357: 'xhvd' => 'application/vnd.yamaha.hv-dic',
358: 'xhvp' => 'application/vnd.yamaha.hv-voice',
359: 'xhvs' => 'application/vnd.yamaha.hv-script',
360: 'xice' => '#x-conference/x-cooltalk',
361:
362: 'xico' => 'image/x-icon',
363: 'xics' => 'text/calendar',
364: 'xief' => 'image/ief',
365: 'xifb' => 'text/calendar',
366: 'xifm' => 'application/vnd.shana.informed.formdata',
367: 'xigl' => 'application/vnd.igloader',
368: 'xigx' => 'application/vnd.micrografx.igx',
369: 'xiif' => 'application/vnd.shana.informed.interchange',
370: 'ximp' => 'application/vnd.accpac.simply.imp',
371:
372: 'xims' => 'application/vnd.ms-ims',
373: 'xin' => 'text/plain',
374: 'xipk' => 'application/vnd.shana.informed.package',
375: 'xirm' => 'application/vnd.ibm.rights-management',
376: 'xirp' => 'application/vnd.irepository.package+xml',
377: 'xitp' => 'application/vnd.shana.informed.formtemplate',
378: 'xivp' => 'application/vnd.immervision-ivp',
379: 'xivu' => 'application/vnd.immervision-ivu',
380: 'xjad' => 'text/vnd.sun.j2me.app-descriptor',
381:
382: 'xjam' => 'application/vnd.jam',
383: 'xjava' => 'text/x-java-source',
384: 'xjisp' => 'application/vnd.jisp',
385: 'xjlt' => 'application/vnd.hp-jlyt',
386: 'xjoda' => 'application/vnd.joost.joda-archive',
387: 'xjpe' => 'image/jpeg',
388: 'xjpeg' => 'image/jpeg',
389: 'xjpg' => 'image/jpeg',
390: 'xjpgm' => 'video/jpm',
391:
392: 'xjpgv' => 'video/jpeg',
393: 'xjpm' => 'video/jpm',
394: 'xjs' => 'application/javascript',
395: 'xjson' => 'application/json',
396: 'xkar' => 'audio/midi',
397: 'xkarbon' => 'application/vnd.kde.karbon',
398: 'xkfo' => 'application/vnd.kde.kformula',
399: 'xkia' => 'application/vnd.kidspiration',
400: 'xkml' => 'application/vnd.google-earth.kml+xml',
401:
402: 'xkmz' => 'application/vnd.google-earth.kmz',
403: 'xkon' => 'application/vnd.kde.kontour',
404: 'xksp' => 'application/vnd.kde.kspread',
405: 'xlatex' => 'application/x-latex',
406: 'xlbd' => 'application/vnd.llamagraphics.life-balance.desktop',
407: 'xlbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
408: 'xles' => 'application/vnd.hhe.lesson-player',
409: 'xlist' => 'text/plain',
410: 'xlog' => 'text/plain',
411:
412: 'xlrm' => 'application/vnd.ms-lrm',
413: 'xltf' => 'application/vnd.frogans.ltf',
414: 'xlvp' => 'audio/vnd.lucent.voice',
415: 'xlwp' => 'application/vnd.lotus-wordpro',
416: 'xm13' => 'application/x-msmediaview',
417: 'xm14' => 'application/x-msmediaview',
418: 'xm1v' => 'video/mpeg',
419: 'xm2a' => 'audio/mpeg',
420: 'xm3a' => 'audio/mpeg',
421:
422: 'xm3u' => 'audio/x-mpegurl',
423: 'xm4u' => 'video/vnd.mpegurl',
424: 'xmag' => 'application/vnd.ecowin.chart',
425: 'xmathml' => 'application/mathml+xml',
426: 'xmbk' => 'application/vnd.mobius.mbk',
427: 'xmbox' => 'application/mbox',
428: 'xmc1' => 'application/vnd.medcalcdata',
429: 'xmcd' => 'application/vnd.mcd',
430: 'xmdb' => 'application/x-msaccess',
431:
432: 'xmdi' => 'image/vnd.ms-modi',
433: 'xmesh' => 'model/mesh',
434: 'xmfm' => 'application/vnd.mfmp',
435: 'xmgz' => 'application/vnd.proteus.magazine',
436: 'xmid' => 'audio/midi',
437: 'xmidi' => 'audio/midi',
438: 'xmif' => 'application/vnd.mif',
439: 'xmime' => 'message/rfc822',
440: 'xmj2' => 'video/mj2',
441:
442: 'xmjp2' => 'video/mj2',
443: 'xmlp' => 'application/vnd.dolby.mlp',
444: 'xmmd' => 'application/vnd.chipnuts.karaoke-mmd',
445: 'xmmf' => 'application/vnd.smaf',
446: 'xmmr' => 'image/vnd.fujixerox.edmics-mmr',
447: 'xmny' => 'application/x-msmoney',
448: 'xmov' => 'video/quicktime',
449: 'xmovie' => 'video/x-sgi-movie',
450: 'xmp2' => 'audio/mpeg',
451:
452: 'xmp2a' => 'audio/mpeg',
453: 'xmp3' => 'audio/mpeg',
454: 'xmp4' => 'video/mp4',
455: 'xmp4a' => 'audio/mp4',
456: 'xmp4s' => 'application/mp4',
457: 'xmp4v' => 'video/mp4',
458: 'xmpc' => 'application/vnd.mophun.certificate',
459: 'xmpe' => 'video/mpeg',
460: 'xmpeg' => 'video/mpeg',
461:
462: 'xmpg' => 'video/mpeg',
463: 'xmpg4' => 'video/mp4',
464: 'xmpga' => 'audio/mpeg',
465: 'xmpkg' => 'application/vnd.apple.installer+xml',
466: 'xmpm' => 'application/vnd.blueice.multipass',
467: 'xmpn' => 'application/vnd.mophun.application',
468: 'xmpp' => 'application/vnd.ms-project',
469: 'xmpt' => 'application/vnd.ms-project',
470: 'xmpy' => 'application/vnd.ibm.minipay',
471:
472: 'xmqy' => 'application/vnd.mobius.mqy',
473: 'xmrc' => 'application/marc',
474: 'xmscml' => 'application/mediaservercontrol+xml',
475: 'xmseq' => 'application/vnd.mseq',
476: 'xmsf' => 'application/vnd.epson.msf',
477: 'xmsh' => 'model/mesh',
478: 'xmsi' => 'application/x-msdownload',
479: 'xmsl' => 'application/vnd.mobius.msl',
480: 'xmsty' => 'application/vnd.muvee.style',
481:
482: 'xmts' => 'model/vnd.mts',
483: 'xmus' => 'application/vnd.musician',
484: 'xmvb' => 'application/x-msmediaview',
485: 'xmwf' => 'application/vnd.mfer',
486: 'xmxf' => 'application/mxf',
487: 'xmxl' => 'application/vnd.recordare.musicxml',
488: 'xmxml' => 'application/xv+xml',
489: 'xmxs' => 'application/vnd.triscape.mxs',
490: 'xmxu' => 'video/vnd.mpegurl',
491:
492: 'xn-gage' => 'application/vnd.nokia.n-gage.symbian.install',
493: 'xngdat' => 'application/vnd.nokia.n-gage.data',
494: 'xnlu' => 'application/vnd.neurolanguage.nlu',
495: 'xnml' => 'application/vnd.enliven',
496: 'xnnd' => 'application/vnd.noblenet-directory',
497: 'xnns' => 'application/vnd.noblenet-sealer',
498: 'xnnw' => 'application/vnd.noblenet-web',
499: 'xnpx' => 'image/vnd.net-fpx',
500: 'xnsf' => 'application/vnd.lotus-notes',
501:
502: 'xoa2' => 'application/vnd.fujitsu.oasys2',
503: 'xoa3' => 'application/vnd.fujitsu.oasys3',
504: 'xoas' => 'application/vnd.fujitsu.oasys',
505: 'xobd' => 'application/x-msbinder',
506: 'xoda' => 'application/oda',
507: 'xodc' => 'application/vnd.oasis.opendocument.chart',
508: 'xodf' => 'application/vnd.oasis.opendocument.formula',
509: 'xodg' => 'application/vnd.oasis.opendocument.graphics',
510: 'xodi' => 'application/vnd.oasis.opendocument.image',
511:
512: 'xodp' => 'application/vnd.oasis.opendocument.presentation',
513: 'xods' => 'application/vnd.oasis.opendocument.spreadsheet',
514: 'xodt' => 'application/vnd.oasis.opendocument.text',
515: 'xogg' => 'application/ogg',
516: 'xoprc' => 'application/vnd.palm',
517: 'xorg' => 'application/vnd.lotus-organizer',
518: 'xotc' => 'application/vnd.oasis.opendocument.chart-template',
519: 'xotf' => 'application/vnd.oasis.opendocument.formula-template',
520: 'xotg' => 'application/vnd.oasis.opendocument.graphics-template',
521:
522: 'xoth' => 'application/vnd.oasis.opendocument.text-web',
523: 'xoti' => 'application/vnd.oasis.opendocument.image-template',
524: 'xotm' => 'application/vnd.oasis.opendocument.text-master',
525: 'xots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
526: 'xott' => 'application/vnd.oasis.opendocument.text-template',
527: 'xoxt' => 'application/vnd.openofficeorg.extension',
528: 'xp10' => 'application/pkcs10',
529: 'xp7r' => 'application/x-pkcs7-certreqresp',
530: 'xp7s' => 'application/pkcs7-signature',
531:
532: 'xpbd' => 'application/vnd.powerbuilder6',
533: 'xpbm' => 'image/x-portable-bitmap',
534: 'xpcl' => 'application/vnd.hp-pcl',
535: 'xpclxl' => 'application/vnd.hp-pclxl',
536: 'xpct' => 'image/x-pict',
537: 'xpcx' => 'image/x-pcx',
538: 'xpdb' => 'chemical/x-pdb',
539: 'xpdf' => 'application/pdf',
540: 'xpfr' => 'application/font-tdpfr',
541:
542: 'xpgm' => 'image/x-portable-graymap',
543: 'xpgn' => 'application/x-chess-pgn',
544: 'xpgp' => 'application/pgp-encrypted',
545: 'xpic' => 'image/x-pict',
546: 'xpki' => 'application/pkixcmp',
547: 'xpkipath' => 'application/pkix-pkipath',
548: 'xplb' => 'application/vnd.3gpp.pic-bw-large',
549: 'xplc' => 'application/vnd.mobius.plc',
550: 'xplf' => 'application/vnd.pocketlearn',
551:
552: 'xpls' => 'application/pls+xml',
553: 'xpml' => 'application/vnd.ctc-posml',
554: 'xpng' => 'image/png',
555: 'xpnm' => 'image/x-portable-anymap',
556: 'xportpkg' => 'application/vnd.macports.portpkg',
557: 'xpot' => 'application/vnd.ms-powerpoint',
558: 'xppd' => 'application/vnd.cups-ppd',
559: 'xppm' => 'image/x-portable-pixmap',
560: 'xpps' => 'application/vnd.ms-powerpoint',
561:
562: 'xppt' => 'application/vnd.ms-powerpoint',
563: 'xpqa' => 'application/vnd.palm',
564: 'xprc' => 'application/vnd.palm',
565: 'xpre' => 'application/vnd.lotus-freelance',
566: 'xprf' => 'application/pics-rules',
567: 'xps' => 'application/postscript',
568: 'xpsb' => 'application/vnd.3gpp.pic-bw-small',
569: 'xpsd' => 'image/vnd.adobe.photoshop',
570: 'xptid' => 'application/vnd.pvi.ptid1',
571:
572: 'xpub' => 'application/x-mspublisher',
573: 'xpvb' => 'application/vnd.3gpp.pic-bw-var',
574: 'xpwn' => 'application/vnd.3m.post-it-notes',
575: 'xqam' => 'application/vnd.epson.quickanime',
576: 'xqbo' => 'application/vnd.intu.qbo',
577: 'xqfx' => 'application/vnd.intu.qfx',
578: 'xqps' => 'application/vnd.publishare-delta-tree',
579: 'xqt' => 'video/quicktime',
580: 'xra' => 'audio/x-pn-realaudio',
581:
582: 'xram' => 'audio/x-pn-realaudio',
583: 'xrar' => 'application/x-rar-compressed',
584: 'xras' => 'image/x-cmu-raster',
585: 'xrcprofile' => 'application/vnd.ipunplugged.rcprofile',
586: 'xrdf' => 'application/rdf+xml',
587: 'xrdz' => 'application/vnd.data-vision.rdz',
588: 'xrep' => 'application/vnd.businessobjects',
589: 'xrgb' => 'image/x-rgb',
590: 'xrif' => 'application/reginfo+xml',
591:
592: 'xrl' => 'application/resource-lists+xml',
593: 'xrlc' => 'image/vnd.fujixerox.edmics-rlc',
594: 'xrm' => 'application/vnd.rn-realmedia',
595: 'xrmi' => 'audio/midi',
596: 'xrmp' => 'audio/x-pn-realaudio-plugin',
597: 'xrms' => 'application/vnd.jcp.javame.midlet-rms',
598: 'xrnc' => 'application/relax-ng-compact-syntax',
599: 'xrpss' => 'application/vnd.nokia.radio-presets',
600: 'xrpst' => 'application/vnd.nokia.radio-preset',
601:
602: 'xrq' => 'application/sparql-query',
603: 'xrs' => 'application/rls-services+xml',
604: 'xrsd' => 'application/rsd+xml',
605: 'xrss' => 'application/rss+xml',
606: 'xrtf' => 'application/rtf',
607: 'xrtx' => 'text/richtext',
608: 'xsaf' => 'application/vnd.yamaha.smaf-audio',
609: 'xsbml' => 'application/sbml+xml',
610: 'xsc' => 'application/vnd.ibm.secure-container',
611:
612: 'xscd' => 'application/x-msschedule',
613: 'xscm' => 'application/vnd.lotus-screencam',
614: 'xscq' => 'application/scvp-cv-request',
615: 'xscs' => 'application/scvp-cv-response',
616: 'xsdp' => 'application/sdp',
617: 'xsee' => 'application/vnd.seemail',
618: 'xsema' => 'application/vnd.sema',
619: 'xsemd' => 'application/vnd.semd',
620: 'xsemf' => 'application/vnd.semf',
621:
622: 'xsetpay' => 'application/set-payment-initiation',
623: 'xsetreg' => 'application/set-registration-initiation',
624: 'xsfs' => 'application/vnd.spotfire.sfs',
625: 'xsgm' => 'text/sgml',
626: 'xsgml' => 'text/sgml',
627: 'xsh' => 'application/x-sh',
628: 'xshar' => 'application/x-shar',
629: 'xshf' => 'application/shf+xml',
630: 'xsilo' => 'model/mesh',
631:
632: 'xsit' => 'application/x-stuffit',
633: 'xsitx' => 'application/x-stuffitx',
634: 'xslt' => 'application/vnd.epson.salt',
635: 'xsnd' => 'audio/basic',
636: 'xspf' => 'application/vnd.yamaha.smaf-phrase',
637: 'xspl' => 'application/x-futuresplash',
638: 'xspot' => 'text/vnd.in3d.spot',
639: 'xspp' => 'application/scvp-vp-response',
640: 'xspq' => 'application/scvp-vp-request',
641:
642: 'xsrc' => 'application/x-wais-source',
643: 'xsrx' => 'application/sparql-results+xml',
644: 'xssf' => 'application/vnd.epson.ssf',
645: 'xssml' => 'application/ssml+xml',
646: 'xstf' => 'application/vnd.wt.stf',
647: 'xstk' => 'application/hyperstudio',
648: 'xstr' => 'application/vnd.pg.format',
649: 'xsus' => 'application/vnd.sus-calendar',
650: 'xsusp' => 'application/vnd.sus-calendar',
651:
652: 'xsv4cpio' => 'application/x-sv4cpio',
653: 'xsv4crc' => 'application/x-sv4crc',
654: 'xsvd' => 'application/vnd.svd',
655: 'xswf' => 'application/x-shockwave-flash',
656: 'xtao' => 'application/vnd.tao.intent-module-archive',
657: 'xtar' => 'application/x-tar',
658: 'xtcap' => 'application/vnd.3gpp2.tcap',
659: 'xtcl' => 'application/x-tcl',
660: 'xtex' => 'application/x-tex',
661:
662: 'xtext' => 'text/plain',
663: 'xtif' => 'image/tiff',
664: 'xtiff' => 'image/tiff',
665: 'xtmo' => 'application/vnd.tmobile-livetv',
666: 'xtorrent' => 'application/x-bittorrent',
667: 'xtpl' => 'application/vnd.groove-tool-template',
668: 'xtpt' => 'application/vnd.trid.tpt',
669: 'xtra' => 'application/vnd.trueapp',
670: 'xtrm' => 'application/x-msterminal',
671:
672: 'xtsv' => 'text/tab-separated-values',
673: 'xtxd' => 'application/vnd.genomatix.tuxedo',
674: 'xtxf' => 'application/vnd.mobius.txf',
675: 'xtxt' => 'text/plain',
676: 'xumj' => 'application/vnd.umajin',
677: 'xunityweb' => 'application/vnd.unity',
678: 'xuoml' => 'application/vnd.uoml+xml',
679: 'xuri' => 'text/uri-list',
680: 'xuris' => 'text/uri-list',
681:
682: 'xurls' => 'text/uri-list',
683: 'xustar' => 'application/x-ustar',
684: 'xutz' => 'application/vnd.uiq.theme',
685: 'xuu' => 'text/x-uuencode',
686: 'xvcd' => 'application/x-cdlink',
687: 'xvcf' => 'text/x-vcard',
688: 'xvcg' => 'application/vnd.groove-vcard',
689: 'xvcs' => 'text/x-vcalendar',
690: 'xvcx' => 'application/vnd.vcx',
691:
692: 'xvis' => 'application/vnd.visionary',
693: 'xviv' => 'video/vnd.vivo',
694: 'xvrml' => 'model/vrml',
695: 'xvsd' => 'application/vnd.visio',
696: 'xvsf' => 'application/vnd.vsf',
697: 'xvss' => 'application/vnd.visio',
698: 'xvst' => 'application/vnd.visio',
699: 'xvsw' => 'application/vnd.visio',
700: 'xvtu' => 'model/vnd.vtu',
701:
702: 'xvxml' => 'application/voicexml+xml',
703: 'xwav' => 'audio/x-wav',
704: 'xwax' => 'audio/x-ms-wax',
705: 'xwbmp' => 'image/vnd.wap.wbmp',
706: 'xwbs' => 'application/vnd.criticaltools.wbs+xml',
707: 'xwbxml' => 'application/vnd.wap.wbxml',
708: 'xwcm' => 'application/vnd.ms-works',
709: 'xwdb' => 'application/vnd.ms-works',
710: 'xwks' => 'application/vnd.ms-works',
711:
712: 'xwm' => 'video/x-ms-wm',
713: 'xwma' => 'audio/x-ms-wma',
714: 'xwmd' => 'application/x-ms-wmd',
715: 'xwmf' => 'application/x-msmetafile',
716: 'xwml' => 'text/vnd.wap.wml',
717: 'xwmlc' => 'application/vnd.wap.wmlc',
718: 'xwmls' => 'text/vnd.wap.wmlscript',
719: 'xwmlsc' => 'application/vnd.wap.wmlscriptc',
720: 'xwmv' => 'video/x-ms-wmv',
721:
722: 'xwmx' => 'video/x-ms-wmx',
723: 'xwmz' => 'application/x-ms-wmz',
724: 'xwpd' => 'application/vnd.wordperfect',
725: 'xwpl' => 'application/vnd.ms-wpl',
726: 'xwps' => 'application/vnd.ms-works',
727: 'xwqd' => 'application/vnd.wqd',
728: 'xwri' => 'application/x-mswrite',
729: 'xwrl' => 'model/vrml',
730: 'xwsdl' => 'application/wsdl+xml',
731:
732: 'xwspolicy' => 'application/wspolicy+xml',
733: 'xwtb' => 'application/vnd.webturbo',
734: 'xwvx' => 'video/x-ms-wvx',
735: 'xx3d' => 'application/vnd.hzn-3d-crossword',
736: 'xxar' => 'application/vnd.xara',
737: 'xxbd' => 'application/vnd.fujixerox.docuworks.binder',
738: 'xxbm' => 'image/x-xbitmap',
739: 'xxdm' => 'application/vnd.syncml.dm+xml',
740: 'xxdp' => 'application/vnd.adobe.xdp+xml',
741:
742: 'xxdw' => 'application/vnd.fujixerox.docuworks',
743: 'xxenc' => 'application/xenc+xml',
744: 'xxfdf' => 'application/vnd.adobe.xfdf',
745: 'xxfdl' => 'application/vnd.xfdl',
746: 'xxht' => 'application/xhtml+xml',
747: 'xxhtml' => 'application/xhtml+xml',
748: 'xxhvml' => 'application/xv+xml',
749: 'xxif' => 'image/vnd.xiff',
750: 'xxla' => 'application/vnd.ms-excel',
751:
752: 'xxlc' => 'application/vnd.ms-excel',
753: 'xxlm' => 'application/vnd.ms-excel',
754: 'xxls' => 'application/vnd.ms-excel',
755: 'xxlt' => 'application/vnd.ms-excel',
756: 'xxlw' => 'application/vnd.ms-excel',
757: 'xxml' => 'application/xml',
758: 'xxo' => 'application/vnd.olpc-sugar',
759: 'xxop' => 'application/xop+xml',
760: 'xxpm' => 'image/x-xpixmap',
761:
762: 'xxpr' => 'application/vnd.is-xpr',
763: 'xxps' => 'application/vnd.ms-xpsdocument',
764: 'xxsl' => 'application/xml',
765: 'xxslt' => 'application/xslt+xml',
766: 'xxsm' => 'application/vnd.syncml+xml',
767: 'xxspf' => 'application/xspf+xml',
768: 'xxul' => 'application/vnd.mozilla.xul+xml',
769: 'xxvm' => 'application/xv+xml',
770: 'xxvml' => 'application/xv+xml',
771:
772: 'xxwd' => 'image/x-xwindowdump',
773: 'xxyz' => 'chemical/x-xyz',
774: 'xzaz' => 'application/vnd.zzazz.deck+xml',
775: 'xzip' => 'application/zip',
776: 'xzmm' => 'application/vnd.handheld-entertainment+xml',
777: 'xodt' => 'application/x-vnd.oasis.opendocument.spreadsheet'
778: );
779: }
780: