diff --git a/package-lock.json b/package-lock.json index a9a94ee7..bade9cfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2323,6 +2323,12 @@ "@types/webpack": "*" } }, + "@types/file-saver": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz", + "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==", + "dev": true + }, "@types/filesize": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/filesize/-/filesize-4.2.0.tgz", @@ -6594,6 +6600,12 @@ } } }, + "file-saver": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", + "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==", + "dev": true + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", diff --git a/package.json b/package.json index 503b7bd1..61d69f6a 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@types/electron-devtools-installer": "^2.2.0", "@types/extract-text-webpack-plugin": "^3.0.4", "@types/fs-extra": "^8.0.0", + "@types/file-saver": "^2.0.1", "@types/filesize": "^4.1.0", "@types/jasmine": "~3.3.8", "@types/jasminewd2": "~2.0.3", @@ -75,6 +76,7 @@ "electron-store": "^4.0.0", "electron-updater": "^4.1.2", "electron-window-state": "^5.0.3", + "file-saver": "^2.0.2", "fs-extra": "^8.1.0", "filesize": "^4.1.2", "hammerjs": "^2.0.8", diff --git a/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts b/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts index 7d3d0baf..4c202d20 100644 --- a/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts +++ b/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts @@ -106,7 +106,7 @@ export class CommonApiService { ? fileTalkDownloadUrl : this.moduleConfig.urls.fileTalkDownload, encodeFileTalkDownload(req), - { reportProgress: true, responseType: 'arraybuffer' } + { reportProgress: true, responseType: 'blob' } ); let progress: Subject; diff --git a/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.html b/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.html index 8b644891..35db1b48 100644 --- a/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.html +++ b/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.html @@ -4,5 +4,6 @@ [userSeq]="userSeq" [deviceType]="deviceType" [token]="token" + (download)="onDownload($event)" (closed)="onClosedViewer()" > diff --git a/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.ts b/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.ts index cac29042..cdbe1ac4 100644 --- a/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.ts +++ b/projects/ucap-webmessenger-app/src/app/layouts/common/dialogs/file-viewer.dialog.component.ts @@ -10,6 +10,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { NGXLogger } from 'ngx-logger'; import { FileEventJson } from '@ucap-webmessenger/protocol-event'; import { DeviceType } from '@ucap-webmessenger/core'; +import * as FileSaver from 'file-saver'; export interface FileViewerDialogData { fileInfo: FileEventJson; @@ -52,6 +53,10 @@ export class FileViewerDialogComponent implements OnInit, OnDestroy { ngOnDestroy(): void {} + onDownload(blob: Blob): void { + FileSaver.saveAs(blob, this.fileInfo.fileName); + } + onClosedViewer(): void { this.dialogRef.close(); } diff --git a/projects/ucap-webmessenger-app/src/assets/mime/mime-type.json b/projects/ucap-webmessenger-app/src/assets/mime/mime-type.json deleted file mode 100644 index 6f6ab0f8..00000000 --- a/projects/ucap-webmessenger-app/src/assets/mime/mime-type.json +++ /dev/null @@ -1,847 +0,0 @@ -{ - "123": "application/vnd.lotus-1-2-3", - "3dml": "text/vnd.in3d.3dml", - "3g2": "video/3gpp2", - "3gp": "video/3gpp", - "7z": "application/x-7z-compressed", - "a": "application/octet-stream", - "a01": "application/x-arj-compressed", - "a02": "application/x-arj-compressed", - "a03": "application/x-arj-compressed", - "a04": "application/x-arj-compressed", - "a05": "application/x-arj-compressed", - "a06": "application/x-arj-compressed", - "a07": "application/x-arj-compressed", - "aab": "application/x-authorware-bin", - "aac": "audio/x-aac", - "aam": "application/x-authorware-map", - "aas": "application/x-authorware-seg", - "abw": "application/x-abiword", - "acc": "application/vnd.americandynamics.acc", - "ace": "application/x-ace-compressed", - "acu": "application/vnd.acucobol", - "acutc": "application/vnd.acucorp", - "adp": "audio/adpcm", - "aep": "application/vnd.audiograph", - "afm": "application/x-font-type1", - "afp": "application/vnd.ibm.modcap", - "ai": "application/postscript", - "aif": "audio/x-aiff", - "aifc": "audio/x-aiff", - "aiff": "audio/x-aiff", - "air": "application/vnd.adobe.air-application-installer-package+zip", - "alz": "application/x-alz", - "ami": "application/vnd.amiga.ami", - "apk": "application/vnd.android.package-archive", - "application": "application/x-ms-application", - "apr": "application/vnd.lotus-approach", - "asc": "application/pgp-signature", - "asf": "video/x-ms-asf", - "asm": "text/x-asm", - "aso": "application/vnd.accpac.simply.aso", - "asx": "video/x-ms-asf", - "atc": "application/vnd.acucorp", - "atom": "application/atom+xml", - "atomcat": "application/atomcat+xml", - "atomsvc": "application/atomsvc+xml", - "atx": "application/vnd.antix.game-component", - "au": "audio/basic", - "avi": "video/x-msvideo", - "aw": "application/applixware", - "azf": "application/vnd.airzip.filesecure.azf", - "azs": "application/vnd.airzip.filesecure.azs", - "azw": "application/vnd.amazon.ebook", - "bat": "application/x-msdownload", - "bcpio": "application/x-bcpio", - "bdf": "application/x-font-bdf", - "bdm": "application/vnd.syncml.dm+wbxml", - "bh2": "application/vnd.fujitsu.oasysprs", - "bin": "application/octet-stream", - "bmi": "application/vnd.bmi", - "bmp": "image/bmp", - "book": "application/vnd.framemaker", - "box": "application/vnd.previewsystems.box", - "boz": "application/x-bzip2", - "bpk": "application/octet-stream", - "btif": "image/prs.btif", - "bz": "application/x-bzip", - "bz2": "application/x-bzip2", - "c": "text/x-c", - "c4d": "application/vnd.clonk.c4group", - "c4f": "application/vnd.clonk.c4group", - "c4g": "application/vnd.clonk.c4group", - "c4p": "application/vnd.clonk.c4group", - "c4u": "application/vnd.clonk.c4group", - "cab": "application/vnd.ms-cab-compressed", - "car": "application/vnd.curl.car", - "cat": "application/vnd.ms-pki.seccat", - "cc": "text/x-c", - "cct": "application/x-director", - "ccxml": "application/ccxml+xml", - "cdbcmsg": "application/vnd.contact.cmsg", - "cdf": "application/x-netcdf", - "cdkey": "application/vnd.mediastation.cdkey", - "cdr": "image/x-coreldraw", - "cdx": "chemical/x-cdx", - "cdxml": "application/vnd.chemdraw+xml", - "cdy": "application/vnd.cinderella", - "cer": "application/pkix-cert", - "cgm": "image/cgm", - "chat": "application/x-chat", - "chm": "application/vnd.ms-htmlhelp", - "chrt": "application/vnd.kde.kchart", - "cif": "chemical/x-cif", - "cii": "application/vnd.anser-web-certificate-issue-initiation", - "cil": "application/vnd.ms-artgalry", - "cla": "application/vnd.claymore", - "class": "application/java-vm", - "clkk": "application/vnd.crick.clicker.keyboard", - "clkp": "application/vnd.crick.clicker.palette", - "clkt": "application/vnd.crick.clicker.template", - "clkw": "application/vnd.crick.clicker.wordbank", - "clkx": "application/vnd.crick.clicker", - "clp": "application/x-msclip", - "cmc": "application/vnd.cosmocaller", - "cmdf": "chemical/x-cmdf", - "cml": "chemical/x-cml", - "cmp": "application/vnd.yellowriver-custom-menu", - "cmx": "image/x-cmx", - "cod": "application/vnd.rim.cod", - "com": "application/x-msdownload", - "conf": "text/plain", - "cpio": "application/x-cpio", - "cpp": "text/x-c", - "cpt": "application/mac-compactpro", - "crd": "application/x-mscardfile", - "crl": "application/pkix-crl", - "crt": "application/x-x509-ca-cert", - "csh": "application/x-csh", - "csml": "chemical/x-csml", - "csp": "application/vnd.commonspace", - "css": "text/css", - "cst": "application/x-director", - "csv": "text/csv", - "cu": "application/cu-seeme", - "curl": "text/vnd.curl", - "cww": "application/prs.cww", - "cxt": "application/x-director", - "cxx": "text/x-c", - "daf": "application/vnd.mobius.daf", - "dataless": "application/vnd.fdsn.seed", - "davmount": "application/davmount+xml", - "dcr": "application/x-director", - "dcurl": "text/vnd.curl.dcurl", - "dd2": "application/vnd.oma.dd2+xml", - "ddd": "application/vnd.fujixerox.ddd", - "deb": "application/x-debian-package", - "def": "text/plain", - "deploy": "application/octet-stream", - "der": "application/x-x509-ca-cert", - "dfac": "application/vnd.dreamfactory", - "dic": "text/x-c", - "diff": "text/plain", - "dir": "application/x-director", - "dis": "application/vnd.mobius.dis", - "dist": "application/octet-stream", - "distz": "application/octet-stream", - "djv": "image/vnd.djvu", - "djvu": "image/vnd.djvu", - "dll": "application/x-msdownload", - "dmg": "application/octet-stream", - "dms": "application/octet-stream", - "dna": "application/vnd.dna", - "doc": "application/msword", - "docm": "application/vnd.ms-word.document.macroenabled.12", - "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "dot": "application/msword", - "dotm": "application/vnd.ms-word.template.macroenabled.12", - "dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template", - "dp": "application/vnd.osgi.dp", - "dpg": "application/vnd.dpgraph", - "dsc": "text/prs.lines.tag", - "dtb": "application/x-dtbook+xml", - "dtd": "application/xml-dtd", - "dts": "audio/vnd.dts", - "dtshd": "audio/vnd.dts.hd", - "dump": "application/octet-stream", - "dvi": "application/x-dvi", - "dwf": "model/vnd.dwf", - "dwg": "image/vnd.dwg", - "dws": "application/octet-stream", - "dwt": "application/x-autocad", - "dxf": "image/vnd.dxf", - "dxp": "application/vnd.spotfire.dxp", - "dxr": "application/x-director", - "ecelp4800": "audio/vnd.nuera.ecelp4800", - "ecelp7470": "audio/vnd.nuera.ecelp7470", - "ecelp9600": "audio/vnd.nuera.ecelp9600", - "ecma": "application/ecmascript", - "edm": "application/vnd.novadigm.edm", - "edx": "application/vnd.novadigm.edx", - "efif": "application/vnd.picsel", - "egg": "application/x-egg", - "ei6": "application/vnd.pg.osasli", - "elc": "application/octet-stream", - "emf": "image/emf", - "eml": "message/rfc822", - "emma": "application/emma+xml", - "eol": "audio/vnd.digital-winds", - "eot": "application/vnd.ms-fontobject", - "eps": "application/postscript", - "epub": "application/epub+zip", - "es3": "application/vnd.eszigno3+xml", - "esf": "application/vnd.epson.esf", - "et3": "application/vnd.eszigno3+xml", - "etx": "text/x-setext", - "exe": "application/x-msdownload", - "ext": "application/vnd.novadigm.ext", - "ez": "application/andrew-inset", - "ez2": "application/vnd.ezpix-album", - "ez3": "application/vnd.ezpix-package", - "f": "text/x-fortran", - "f4v": "video/x-f4v", - "f77": "text/x-fortran", - "f90": "text/x-fortran", - "fbs": "image/vnd.fastbidsheet", - "fdf": "application/vnd.fdf", - "fe_launch": "application/vnd.denovo.fcselayout-link", - "fg5": "application/vnd.fujitsu.oasysgp", - "fgd": "application/x-director", - "fh": "image/x-freehand", - "fh4": "image/x-freehand", - "fh5": "image/x-freehand", - "fh7": "image/x-freehand", - "fhc": "image/x-freehand", - "fig": "application/x-xfig", - "fla": "application/octet-stream", - "flac": "audio/flac", - "fli": "video/x-fli", - "flo": "application/vnd.micrografx.flo", - "flv": "video/x-flv", - "flw": "application/vnd.kde.kivio", - "flx": "text/vnd.fmi.flexstor", - "fly": "text/vnd.fly", - "fm": "application/vnd.framemaker", - "fnc": "application/vnd.frogans.fnc", - "for": "text/x-fortran", - "fpx": "image/vnd.fpx", - "frame": "application/vnd.framemaker", - "fsc": "application/vnd.fsc.weblaunch", - "fst": "image/vnd.fst", - "ftc": "application/vnd.fluxtime.clip", - "fti": "application/vnd.anser-web-funds-transfer-initiation", - "fvt": "video/vnd.fvt", - "fzs": "application/vnd.fuzzysheet", - "g3": "image/g3fax", - "gac": "application/vnd.groove-account", - "gdl": "model/vnd.gdl", - "geo": "application/vnd.dynageo", - "gex": "application/vnd.geometry-explorer", - "ggb": "application/vnd.geogebra.file", - "ggt": "application/vnd.geogebra.tool", - "ghf": "application/vnd.groove-help", - "gif": "image/gif", - "gim": "application/vnd.groove-identity-message", - "gmx": "application/vnd.gmx", - "gnumeric": "application/x-gnumeric", - "gph": "application/vnd.flographit", - "gqf": "application/vnd.grafeq", - "gqs": "application/vnd.grafeq", - "gram": "application/srgs", - "gre": "application/vnd.geometry-explorer", - "grv": "application/vnd.groove-injector", - "grxml": "application/srgs+xml", - "gsf": "application/x-font-ghostscript", - "gtar": "application/x-gtar", - "gtm": "application/vnd.groove-tool-message", - "gtw": "model/vnd.gtw", - "gv": "text/vnd.graphviz", - "gz": "application/x-gzip", - "h": "text/x-c", - "h261": "video/h261", - "h263": "video/h263", - "h264": "video/h264", - "hbci": "application/vnd.hbci", - "hdf": "application/x-hdf", - "hh": "text/x-c", - "hlp": "application/winhlp", - "hpgl": "application/vnd.hp-hpgl", - "hpid": "application/vnd.hp-hpid", - "hps": "application/vnd.hp-hps", - "hqx": "application/mac-binhex40", - "htke": "application/vnd.kenameaapp", - "htm": "text/html", - "html": "text/html", - "hvd": "application/vnd.yamaha.hv-dic", - "hvp": "application/vnd.yamaha.hv-voice", - "hvs": "application/vnd.yamaha.hv-script", - "hwp": "application/x-hwp", - "icc": "application/vnd.iccprofile", - "ice": "x-conference/x-cooltalk", - "icm": "application/vnd.iccprofile", - "ico": "image/x-icon", - "ics": "text/calendar", - "ief": "image/ief", - "ifb": "text/calendar", - "ifm": "application/vnd.shana.informed.formdata", - "iges": "model/iges", - "igl": "application/vnd.igloader", - "igs": "model/iges", - "igx": "application/vnd.micrografx.igx", - "iif": "application/vnd.shana.informed.interchange", - "imp": "application/vnd.accpac.simply.imp", - "ims": "application/vnd.ms-ims", - "in": "text/plain", - "ipk": "application/vnd.shana.informed.package", - "irm": "application/vnd.ibm.rights-management", - "irp": "application/vnd.irepository.package+xml", - "iso": "application/octet-stream", - "itp": "application/vnd.shana.informed.formtemplate", - "ivp": "application/vnd.immervision-ivp", - "ivu": "application/vnd.immervision-ivu", - "jad": "text/vnd.sun.j2me.app-descriptor", - "jam": "application/vnd.jam", - "jar": "application/java-archive", - "java": "text/x-java-source", - "jisp": "application/vnd.jisp", - "jlt": "application/vnd.hp-jlyt", - "jnlp": "application/x-java-jnlp-file", - "joda": "application/vnd.joost.joda-archive", - "jpe": "image/jpeg", - "jpeg": "image/jpeg", - "jpg": "image/jpeg", - "jpgm": "video/jpm", - "jpgv": "video/jpeg", - "jpm": "video/jpm", - "js": "application/javascript", - "json": "application/json", - "kar": "audio/midi", - "karbon": "application/vnd.kde.karbon", - "keynote": "application/vnd.apple.keynote", - "kfo": "application/vnd.kde.kformula", - "kia": "application/vnd.kidspiration", - "kil": "application/x-killustrator", - "kml": "application/vnd.google-earth.kml+xml", - "kmz": "application/vnd.google-earth.kmz", - "kne": "application/vnd.kinar", - "knp": "application/vnd.kinar", - "kon": "application/vnd.kde.kontour", - "kpr": "application/vnd.kde.kpresenter", - "kpt": "application/vnd.kde.kpresenter", - "ksh": "text/plain", - "ksp": "application/vnd.kde.kspread", - "ktr": "application/vnd.kahootz", - "ktz": "application/vnd.kahootz", - "kwd": "application/vnd.kde.kword", - "kwt": "application/vnd.kde.kword", - "latex": "application/x-latex", - "lbd": "application/vnd.llamagraphics.life-balance.desktop", - "lbe": "application/vnd.llamagraphics.life-balance.exchange+xml", - "les": "application/vnd.hhe.lesson-player", - "lha": "application/octet-stream", - "link66": "application/vnd.route66.link66+xml", - "list": "text/plain", - "list3820": "application/vnd.ibm.modcap", - "listafp": "application/vnd.ibm.modcap", - "log": "text/plain", - "lostxml": "application/lost+xml", - "lrf": "application/octet-stream", - "lrm": "application/vnd.ms-lrm", - "ltf": "application/vnd.frogans.ltf", - "lvp": "audio/vnd.lucent.voice", - "lwp": "application/vnd.lotus-wordpro", - "lzh": "application/octet-stream", - "m13": "application/x-msmediaview", - "m14": "application/x-msmediaview", - "m1v": "video/mpeg", - "m2a": "audio/mpeg", - "m2v": "video/mpeg", - "m3a": "audio/mpeg", - "m3u": "audio/x-mpegurl", - "m4a": "audio/x-m4a", - "m4u": "video/vnd.mpegurl", - "m4v": "video/x-m4v", - "ma": "application/mathematica", - "mag": "application/vnd.ecowin.chart", - "maker": "application/vnd.framemaker", - "man": "text/troff", - "mathml": "application/mathml+xml", - "mb": "application/mathematica", - "mbk": "application/vnd.mobius.mbk", - "mbox": "application/mbox", - "mc1": "application/vnd.medcalcdata", - "mcd": "application/vnd.mcd", - "mcurl": "text/vnd.curl.mcurl", - "mdb": "application/x-msaccess", - "mdi": "image/vnd.ms-modi", - "me": "text/troff", - "mesh": "model/mesh", - "mfm": "application/vnd.mfmp", - "mgz": "application/vnd.proteus.magazine", - "mht": "message/rfc822", - "mhtml": "message/rfc822", - "mid": "audio/midi", - "midi": "audio/midi", - "mif": "application/vnd.mif", - "mime": "message/rfc822", - "mj2": "video/mj2", - "mjp2": "video/mj2", - "mkv": "video/x-matroska", - "mlp": "application/vnd.dolby.mlp", - "mmd": "application/vnd.chipnuts.karaoke-mmd", - "mmf": "application/vnd.smaf", - "mmr": "image/vnd.fujixerox.edmics-mmr", - "mny": "application/x-msmoney", - "mobi": "application/x-mobipocket-ebook", - "mov": "video/quicktime", - "movie": "video/x-sgi-movie", - "mp2": "audio/mpeg", - "mp2a": "audio/mpeg", - "mp3": "audio/mpeg", - "mp4": "video/mp4", - "mp4a": "audio/mp4", - "mp4s": "application/mp4", - "mp4v": "video/mp4", - "mpa": "video/mpeg", - "mpc": "application/vnd.mophun.certificate", - "mpe": "video/mpeg", - "mpeg": "video/mpeg", - "mpega": "audio/mpeg", - "mpg": "video/mpeg", - "mpg4": "video/mp4", - "mpga": "audio/mpeg", - "mpkg": "application/vnd.apple.installer+xml", - "mpm": "application/vnd.blueice.multipass", - "mpn": "application/vnd.mophun.application", - "mpp": "application/vnd.ms-project", - "mpt": "application/vnd.ms-project", - "mpy": "application/vnd.ibm.minipay", - "mqy": "application/vnd.mobius.mqy", - "mrc": "application/marc", - "ms": "text/troff", - "mscml": "application/mediaservercontrol+xml", - "mseed": "application/vnd.fdsn.mseed", - "mseq": "application/vnd.mseq", - "msf": "application/vnd.epson.msf", - "msh": "model/mesh", - "msi": "application/x-msdownload", - "msl": "application/vnd.mobius.msl", - "msty": "application/vnd.muvee.style", - "mts": "model/vnd.mts", - "mus": "application/vnd.musician", - "musicxml": "application/vnd.recordare.musicxml+xml", - "mvb": "application/x-msmediaview", - "mwf": "application/vnd.mfer", - "mxf": "application/mxf", - "mxl": "application/vnd.recordare.musicxml", - "mxml": "application/xv+xml", - "mxs": "application/vnd.triscape.mxs", - "mxu": "video/vnd.mpegurl", - "n-gage": "application/vnd.nokia.n-gage.symbian.install", - "nb": "application/mathematica", - "nc": "application/x-netcdf", - "ncx": "application/x-dtbncx+xml", - "ngdat": "application/vnd.nokia.n-gage.data", - "nlu": "application/vnd.neurolanguage.nlu", - "nml": "application/vnd.enliven", - "nnd": "application/vnd.noblenet-directory", - "nns": "application/vnd.noblenet-sealer", - "nnw": "application/vnd.noblenet-web", - "npx": "image/vnd.net-fpx", - "nsf": "application/vnd.lotus-notes", - "numbers": "application/vnd.apple.numbers", - "nws": "message/rfc822", - "o": "application/octet-stream", - "oa2": "application/vnd.fujitsu.oasys2", - "oa3": "application/vnd.fujitsu.oasys3", - "oas": "application/vnd.fujitsu.oasys", - "obd": "application/x-msbinder", - "obj": "application/octet-stream", - "oda": "application/oda", - "odb": "application/vnd.oasis.opendocument.database", - "odc": "application/vnd.oasis.opendocument.chart", - "odf": "application/vnd.oasis.opendocument.formula", - "odft": "application/vnd.oasis.opendocument.formula-template", - "odg": "application/vnd.oasis.opendocument.graphics", - "odi": "application/vnd.oasis.opendocument.image", - "odp": "application/vnd.oasis.opendocument.presentation", - "ods": "application/vnd.oasis.opendocument.spreadsheet", - "odt": "application/vnd.oasis.opendocument.text", - "oga": "audio/ogg", - "ogg": "audio/ogg", - "ogv": "video/ogg", - "ogx": "application/ogg", - "one": "application/msonenote", - "onepkg": "application/onenote", - "onetmp": "application/onenote", - "onetoc": "application/onenote", - "onetoc2": "application/onenote", - "opf": "application/oebps-package+xml", - "oprc": "application/vnd.palm", - "org": "application/vnd.lotus-organizer", - "osf": "application/vnd.yamaha.openscoreformat", - "osfpvg": "application/vnd.yamaha.openscoreformat.osfpvg+xml", - "otc": "application/vnd.oasis.opendocument.chart-template", - "otf": "application/x-font-otf", - "otg": "application/vnd.oasis.opendocument.graphics-template", - "oth": "application/vnd.oasis.opendocument.text-web", - "oti": "application/vnd.oasis.opendocument.image-template", - "otm": "application/vnd.oasis.opendocument.text-master", - "otp": "application/vnd.oasis.opendocument.presentation-template", - "ots": "application/vnd.oasis.opendocument.spreadsheet-template", - "ott": "application/vnd.oasis.opendocument.text-template", - "oxt": "application/vnd.openofficeorg.extension", - "p": "text/x-pascal", - "p10": "application/pkcs10", - "p12": "application/x-pkcs12", - "p7b": "application/x-pkcs7-certificates", - "p7c": "application/pkcs7-mime", - "p7m": "application/pkcs7-mime", - "p7r": "application/x-pkcs7-certreqresp", - "p7s": "application/pkcs7-signature", - "pas": "text/x-pascal", - "pages": "application/vnd.apple.pages", - "pbd": "application/vnd.powerbuilder6", - "pbm": "image/x-portable-bitmap", - "pcf": "application/x-font-pcf", - "pcl": "application/vnd.hp-pcl", - "pclxl": "application/vnd.hp-pclxl", - "pct": "image/x-pict", - "pcurl": "application/vnd.curl.pcurl", - "pcx": "image/x-pcx", - "pdb": "application/vnd.palm", - "pdf": "application/pdf", - "pfa": "application/x-font-type1", - "pfb": "application/x-font-type1", - "pfm": "application/x-font-type1", - "pfr": "application/font-tdpfr", - "pfx": "application/x-pkcs12", - "pgm": "image/x-portable-graymap", - "pgn": "application/x-chess-pgn", - "pgp": "application/pgp-encrypted", - "pic": "image/x-pict", - "pkg": "application/octet-stream", - "pki": "application/pkixcmp", - "pkipath": "application/pkix-pkipath", - "pl": "text/plain", - "plb": "application/vnd.3gpp.pic-bw-large", - "plc": "application/vnd.mobius.plc", - "plf": "application/vnd.pocketlearn", - "pls": "application/pls+xml", - "plt": "Application/octet-stream", - "pml": "application/vnd.ctc-posml", - "png": "image/png", - "pnm": "image/x-portable-anymap", - "portpkg": "application/vnd.macports.portpkg", - "pot": "application/vnd.ms-powerpoint", - "potm": "application/vnd.ms-powerpoint.template.macroenabled.12", - "potx": "application/vnd.openxmlformats-officedocument.presentationml.template", - "ppa": "application/vnd.ms-powerpoint", - "ppam": "application/vnd.ms-powerpoint.addin.macroenabled.12", - "ppd": "application/vnd.cups-ppd", - "ppm": "image/x-portable-pixmap", - "pps": "application/vnd.ms-powerpoint", - "ppsm": "application/vnd.ms-powerpoint.slideshow.macroenabled.12", - "ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow", - "ppt": "application/vnd.ms-powerpoint", - "pptm": "application/vnd.ms-powerpoint.presentation.macroenabled.12", - "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", - "pqa": "application/vnd.palm", - "prc": "application/x-mobipocket-ebook", - "pre": "application/vnd.lotus-freelance", - "prf": "application/pics-rules", - "ps": "application/postscript", - "psb": "application/vnd.3gpp.pic-bw-small", - "psd": "image/vnd.adobe.photoshop", - "psf": "application/x-font-linux-psf", - "ptid": "application/vnd.pvi.ptid1", - "pub": "application/x-mspublisher", - "pvb": "application/vnd.3gpp.pic-bw-var", - "pwn": "application/vnd.3m.post-it-notes", - "pwz": "application/vnd.ms-powerpoint", - "py": "text/x-python", - "pya": "audio/vnd.ms-playready.media.pya", - "pyc": "application/x-python-code", - "pyo": "application/x-python-code", - "pyv": "video/vnd.ms-playready.media.pyv", - "qam": "application/vnd.epson.quickanime", - "qbo": "application/vnd.intu.qbo", - "qfx": "application/vnd.intu.qfx", - "qps": "application/vnd.publishare-delta-tree", - "qt": "video/quicktime", - "qwd": "application/vnd.quark.quarkxpress", - "qwt": "application/vnd.quark.quarkxpress", - "qxb": "application/vnd.quark.quarkxpress", - "qxd": "application/vnd.quark.quarkxpress", - "qxl": "application/vnd.quark.quarkxpress", - "qxt": "application/vnd.quark.quarkxpress", - "ra": "audio/x-pn-realaudio", - "ram": "audio/x-pn-realaudio", - "rar": "application/x-rar-compressed", - "ras": "image/x-cmu-raster", - "rcprofile": "application/vnd.ipunplugged.rcprofile", - "rdf": "application/rdf+xml", - "rdz": "application/vnd.data-vision.rdz", - "rep": "application/vnd.businessobjects", - "res": "application/x-dtbresource+xml", - "rgb": "image/x-rgb", - "rif": "application/reginfo+xml", - "rl": "application/resource-lists+xml", - "rlc": "image/vnd.fujixerox.edmics-rlc", - "rld": "application/resource-lists-diff+xml", - "rm": "application/vnd.rn-realmedia", - "rmi": "audio/midi", - "rmp": "audio/x-pn-realaudio-plugin", - "rms": "application/vnd.jcp.javame.midlet-rms", - "rnc": "application/relax-ng-compact-syntax", - "roff": "text/troff", - "rpm": "application/x-rpm", - "rpss": "application/vnd.nokia.radio-presets", - "rpst": "application/vnd.nokia.radio-preset", - "rq": "application/sparql-query", - "rs": "application/rls-services+xml", - "rsd": "application/rsd+xml", - "rss": "application/rss+xml", - "rtf": "application/rtf", - "rtx": "text/richtext", - "rv": "video/vnd.rn-realvideo", - "s": "text/x-asm", - "saf": "application/vnd.yamaha.smaf-audio", - "sbml": "application/sbml+xml", - "sc": "application/vnd.ibm.secure-container", - "scd": "application/x-msschedule", - "scm": "application/vnd.lotus-screencam", - "scq": "application/scvp-cv-request", - "scs": "application/scvp-cv-response", - "scurl": "text/vnd.curl.scurl", - "sda": "application/vnd.stardivision.draw", - "sdc": "application/vnd.stardivision.calc", - "sdd": "application/vnd.stardivision.impress", - "sdkd": "application/vnd.solent.sdkm+xml", - "sdkm": "application/vnd.solent.sdkm+xml", - "sdp": "application/sdp", - "sdw": "application/vnd.stardivision.writer", - "see": "application/vnd.seemail", - "seed": "application/vnd.fdsn.seed", - "sema": "application/vnd.sema", - "semd": "application/vnd.semd", - "semf": "application/vnd.semf", - "ser": "application/java-serialized-object", - "setpay": "application/set-payment-initiation", - "setreg": "application/set-registration-initiation", - "sfd-hdstx": "application/vnd.hydrostatix.sof-data", - "sfs": "application/vnd.spotfire.sfs", - "sgl": "application/vnd.stardivision.writer-global", - "sgm": "text/sgml", - "sgml": "text/sgml", - "sh": "application/x-sh", - "shar": "application/x-shar", - "shf": "application/shf+xml", - "si": "text/vnd.wap.si", - "sic": "application/vnd.wap.sic", - "sig": "application/pgp-signature", - "silo": "model/mesh", - "sis": "application/vnd.symbian.install", - "sisx": "application/vnd.symbian.install", - "sit": "application/x-stuffit", - "sitx": "application/x-stuffitx", - "skd": "application/vnd.koan", - "skm": "application/vnd.koan", - "skp": "application/vnd.koan", - "skt": "application/vnd.koan", - "sl": "text/vnd.wap.sl", - "slc": "application/vnd.wap.slc", - "sldm": "application/vnd.ms-powerpoint.slide.macroenabled.12", - "sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide", - "slt": "application/vnd.epson.salt", - "smf": "application/vnd.stardivision.math", - "smi": "application/smil+xml", - "smil": "application/smil+xml", - "snd": "audio/basic", - "snf": "application/x-font-snf", - "so": "application/octet-stream", - "spc": "application/x-pkcs7-certificates", - "spf": "application/vnd.yamaha.smaf-phrase", - "spl": "application/x-futuresplash", - "spot": "text/vnd.in3d.spot", - "spp": "application/scvp-vp-response", - "spq": "application/scvp-vp-request", - "spx": "audio/ogg", - "src": "application/x-wais-source", - "srx": "application/sparql-results+xml", - "sse": "application/vnd.kodak-descriptor", - "ssf": "application/vnd.epson.ssf", - "ssml": "application/ssml+xml", - "stc": "application/vnd.sun.xml.calc.template", - "std": "application/vnd.sun.xml.draw.template", - "stf": "application/vnd.wt.stf", - "sti": "application/vnd.sun.xml.impress.template", - "stk": "application/hyperstudio", - "stl": "application/vnd.ms-pki.stl", - "str": "application/vnd.pg.format", - "stw": "application/vnd.sun.xml.writer.template", - "sus": "application/vnd.sus-calendar", - "susp": "application/vnd.sus-calendar", - "sv4cpio": "application/x-sv4cpio", - "sv4crc": "application/x-sv4crc", - "svd": "application/vnd.svd", - "svg": "image/svg+xml", - "svgz": "image/svg+xml", - "swa": "application/x-director", - "swf": "application/x-shockwave-flash", - "swi": "application/vnd.arastra.swi", - "sxc": "application/vnd.sun.xml.calc", - "sxd": "application/vnd.sun.xml.draw", - "sxg": "application/vnd.sun.xml.writer.global", - "sxi": "application/vnd.sun.xml.impress", - "sxm": "application/vnd.sun.xml.math", - "sxw": "application/vnd.sun.xml.writer", - "t": "text/troff", - "tao": "application/vnd.tao.intent-module-archive", - "tar": "application/x-tar", - "tcap": "application/vnd.3gpp2.tcap", - "tcl": "application/x-tcl", - "teacher": "application/vnd.smart.teacher", - "tex": "application/x-tex", - "texi": "application/x-texinfo", - "texinfo": "application/x-texinfo", - "text": "text/plain", - "tfm": "application/x-tex-tfm", - "tgz": "application/x-gzip", - "tif": "image/tiff", - "tiff": "image/tiff", - "tmo": "application/vnd.tmobile-livetv", - "torrent": "application/x-bittorrent", - "tpl": "application/vnd.groove-tool-template", - "tpt": "application/vnd.trid.tpt", - "tr": "text/troff", - "tra": "application/vnd.trueapp", - "trm": "application/x-msterminal", - "ts": "video/MP2T", - "tsv": "text/tab-separated-values", - "ttc": "application/x-font-ttf", - "ttf": "application/x-font-ttf", - "twd": "application/vnd.simtech-mindmapper", - "twds": "application/vnd.simtech-mindmapper", - "txd": "application/vnd.genomatix.tuxedo", - "txf": "application/vnd.mobius.txf", - "txt": "text/plain", - "u32": "application/x-authorware-bin", - "udeb": "application/x-debian-package", - "ufd": "application/vnd.ufdl", - "ufdl": "application/vnd.ufdl", - "umj": "application/vnd.umajin", - "unityweb": "application/vnd.unity", - "uoml": "application/vnd.uoml+xml", - "uri": "text/uri-list", - "uris": "text/uri-list", - "urls": "text/uri-list", - "ustar": "application/x-ustar", - "utz": "application/vnd.uiq.theme", - "uu": "text/x-uuencode", - "vcd": "application/x-cdlink", - "vcf": "text/x-vcard", - "vcg": "application/vnd.groove-vcard", - "vcs": "text/x-vcalendar", - "vcx": "application/vnd.vcx", - "vis": "application/vnd.visionary", - "viv": "video/vnd.vivo", - "vor": "application/vnd.stardivision.writer", - "vox": "application/x-authorware-bin", - "vrml": "model/vrml", - "vsd": "application/vnd.visio", - "vsf": "application/vnd.vsf", - "vss": "application/vnd.visio", - "vst": "application/vnd.visio", - "vsw": "application/vnd.visio", - "vtu": "model/vnd.vtu", - "vxml": "application/voicexml+xml", - "w3d": "application/x-director", - "wad": "application/x-doom", - "wav": "audio/x-wav", - "wax": "audio/x-ms-wax", - "wbmp": "image/vnd.wap.wbmp", - "wbs": "application/vnd.criticaltools.wbs+xml", - "wbxml": "application/vnd.wap.wbxml", - "wcm": "application/vnd.ms-works", - "wdb": "application/vnd.ms-works", - "webm": "video/webm", - "wiz": "application/msword", - "wks": "application/vnd.ms-works", - "wm": "video/x-ms-wm", - "wma": "audio/x-ms-wma", - "wmd": "application/x-ms-wmd", - "wmf": "application/x-msmetafile", - "wml": "text/vnd.wap.wml", - "wmlc": "application/vnd.wap.wmlc", - "wmls": "text/vnd.wap.wmlscript", - "wmlsc": "application/vnd.wap.wmlscriptc", - "wmv": "video/x-ms-wmv", - "wmx": "video/x-ms-wmx", - "wmz": "application/x-ms-wmz", - "wpd": "application/vnd.wordperfect", - "wpl": "application/vnd.ms-wpl", - "wps": "application/vnd.ms-works", - "wqd": "application/vnd.wqd", - "wri": "application/x-mswrite", - "wrl": "model/vrml", - "wsdl": "application/wsdl+xml", - "wspolicy": "application/wspolicy+xml", - "wtb": "application/vnd.webturbo", - "wvx": "video/x-ms-wvx", - "x32": "application/x-authorware-bin", - "x3d": "application/vnd.hzn-3d-crossword", - "xap": "application/x-silverlight-app", - "xar": "application/vnd.xara", - "xbap": "application/x-ms-xbap", - "xbd": "application/vnd.fujixerox.docuworks.binder", - "xbm": "image/x-xbitmap", - "xdm": "application/vnd.syncml.dm+xml", - "xdp": "application/vnd.adobe.xdp+xml", - "xdw": "application/vnd.fujixerox.docuworks", - "xenc": "application/xenc+xml", - "xer": "application/patch-ops-error+xml", - "xfdf": "application/vnd.adobe.xfdf", - "xfdl": "application/vnd.xfdl", - "xht": "application/xhtml+xml", - "xhtml": "application/xhtml+xml", - "xhvml": "application/xv+xml", - "xif": "image/vnd.xiff", - "xla": "application/vnd.ms-excel", - "xlam": "application/vnd.ms-excel.addin.macroenabled.12", - "xlb": "application/vnd.ms-excel", - "xlc": "application/vnd.ms-excel", - "xlm": "application/vnd.ms-excel", - "xls": "application/vnd.ms-excel", - "xlsb": "application/vnd.ms-excel.sheet.binary.macroenabled.12", - "xlsm": "application/vnd.ms-excel.sheet.macroenabled.12", - "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "xlt": "application/vnd.ms-excel", - "xltm": "application/vnd.ms-excel.template.macroenabled.12", - "xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", - "xlw": "application/vnd.ms-excel", - "xml": "application/xml", - "xo": "application/vnd.olpc-sugar", - "xop": "application/xop+xml", - "xpdl": "application/xml", - "xpi": "application/x-xpinstall", - "xpm": "image/x-xpixmap", - "xpr": "application/vnd.is-xpr", - "xps": "application/vnd.ms-xpsdocument", - "xpw": "application/vnd.intercon.formnet", - "xpx": "application/vnd.intercon.formnet", - "xsl": "application/xml", - "xslt": "application/xslt+xml", - "xsm": "application/vnd.syncml+xml", - "xspf": "application/xspf+xml", - "xul": "application/vnd.mozilla.xul+xml", - "xvm": "application/xv+xml", - "xvml": "application/xv+xml", - "xwd": "image/x-xwindowdump", - "xyz": "chemical/x-xyz", - "zaz": "application/vnd.zzazz.deck+xml", - "zip": "application/zip", - "zir": "application/vnd.zul", - "zirz": "application/vnd.zul", - "zmm": "application/vnd.handheld-entertainment+xml" -} diff --git a/projects/ucap-webmessenger-core/src/lib/utils/file.util.ts b/projects/ucap-webmessenger-core/src/lib/utils/file.util.ts index 6cfa31f0..2d215ea3 100644 --- a/projects/ucap-webmessenger-core/src/lib/utils/file.util.ts +++ b/projects/ucap-webmessenger-core/src/lib/utils/file.util.ts @@ -13,4 +13,19 @@ export class FileUtil { } return extensions; } + + static toDataUrl(blob: Blob): Promise { + return new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.readAsDataURL(blob); + + fileReader.onload = () => { + return resolve(fileReader.result); + }; + fileReader.onerror = (event: ProgressEvent) => { + fileReader.abort(); + return reject(fileReader.error); + }; + }); + } } diff --git a/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts b/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts new file mode 100644 index 00000000..039f8306 --- /dev/null +++ b/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts @@ -0,0 +1,874 @@ +const MimeMap: Map = new Map([ + ['123', 'application/vnd.lotus-1-2-3'], + ['3dml', 'text/vnd.in3d.3dml'], + ['3g2', 'video/3gpp2'], + ['3gp', 'video/3gpp'], + ['7z', 'application/x-7z-compressed'], + ['a', 'application/octet-stream'], + ['a01', 'application/x-arj-compressed'], + ['a02', 'application/x-arj-compressed'], + ['a03', 'application/x-arj-compressed'], + ['a04', 'application/x-arj-compressed'], + ['a05', 'application/x-arj-compressed'], + ['a06', 'application/x-arj-compressed'], + ['a07', 'application/x-arj-compressed'], + ['aab', 'application/x-authorware-bin'], + ['aac', 'audio/x-aac'], + ['aam', 'application/x-authorware-map'], + ['aas', 'application/x-authorware-seg'], + ['abw', 'application/x-abiword'], + ['acc', 'application/vnd.americandynamics.acc'], + ['ace', 'application/x-ace-compressed'], + ['acu', 'application/vnd.acucobol'], + ['acutc', 'application/vnd.acucorp'], + ['adp', 'audio/adpcm'], + ['aep', 'application/vnd.audiograph'], + ['afm', 'application/x-font-type1'], + ['afp', 'application/vnd.ibm.modcap'], + ['ai', 'application/postscript'], + ['aif', 'audio/x-aiff'], + ['aifc', 'audio/x-aiff'], + ['aiff', 'audio/x-aiff'], + ['air', 'application/vnd.adobe.air-application-installer-package+zip'], + ['alz', 'application/x-alz'], + ['ami', 'application/vnd.amiga.ami'], + ['apk', 'application/vnd.android.package-archive'], + ['application', 'application/x-ms-application'], + ['apr', 'application/vnd.lotus-approach'], + ['asc', 'application/pgp-signature'], + ['asf', 'video/x-ms-asf'], + ['asm', 'text/x-asm'], + ['aso', 'application/vnd.accpac.simply.aso'], + ['asx', 'video/x-ms-asf'], + ['atc', 'application/vnd.acucorp'], + ['atom', 'application/atom+xml'], + ['atomcat', 'application/atomcat+xml'], + ['atomsvc', 'application/atomsvc+xml'], + ['atx', 'application/vnd.antix.game-component'], + ['au', 'audio/basic'], + ['avi', 'video/x-msvideo'], + ['aw', 'application/applixware'], + ['azf', 'application/vnd.airzip.filesecure.azf'], + ['azs', 'application/vnd.airzip.filesecure.azs'], + ['azw', 'application/vnd.amazon.ebook'], + ['bat', 'application/x-msdownload'], + ['bcpio', 'application/x-bcpio'], + ['bdf', 'application/x-font-bdf'], + ['bdm', 'application/vnd.syncml.dm+wbxml'], + ['bh2', 'application/vnd.fujitsu.oasysprs'], + ['bin', 'application/octet-stream'], + ['bmi', 'application/vnd.bmi'], + ['bmp', 'image/bmp'], + ['book', 'application/vnd.framemaker'], + ['box', 'application/vnd.previewsystems.box'], + ['boz', 'application/x-bzip2'], + ['bpk', 'application/octet-stream'], + ['btif', 'image/prs.btif'], + ['bz', 'application/x-bzip'], + ['bz2', 'application/x-bzip2'], + ['c', 'text/x-c'], + ['c4d', 'application/vnd.clonk.c4group'], + ['c4f', 'application/vnd.clonk.c4group'], + ['c4g', 'application/vnd.clonk.c4group'], + ['c4p', 'application/vnd.clonk.c4group'], + ['c4u', 'application/vnd.clonk.c4group'], + ['cab', 'application/vnd.ms-cab-compressed'], + ['car', 'application/vnd.curl.car'], + ['cat', 'application/vnd.ms-pki.seccat'], + ['cc', 'text/x-c'], + ['cct', 'application/x-director'], + ['ccxml', 'application/ccxml+xml'], + ['cdbcmsg', 'application/vnd.contact.cmsg'], + ['cdf', 'application/x-netcdf'], + ['cdkey', 'application/vnd.mediastation.cdkey'], + ['cdr', 'image/x-coreldraw'], + ['cdx', 'chemical/x-cdx'], + ['cdxml', 'application/vnd.chemdraw+xml'], + ['cdy', 'application/vnd.cinderella'], + ['cer', 'application/pkix-cert'], + ['cgm', 'image/cgm'], + ['chat', 'application/x-chat'], + ['chm', 'application/vnd.ms-htmlhelp'], + ['chrt', 'application/vnd.kde.kchart'], + ['cif', 'chemical/x-cif'], + ['cii', 'application/vnd.anser-web-certificate-issue-initiation'], + ['cil', 'application/vnd.ms-artgalry'], + ['cla', 'application/vnd.claymore'], + ['class', 'application/java-vm'], + ['clkk', 'application/vnd.crick.clicker.keyboard'], + ['clkp', 'application/vnd.crick.clicker.palette'], + ['clkt', 'application/vnd.crick.clicker.template'], + ['clkw', 'application/vnd.crick.clicker.wordbank'], + ['clkx', 'application/vnd.crick.clicker'], + ['clp', 'application/x-msclip'], + ['cmc', 'application/vnd.cosmocaller'], + ['cmdf', 'chemical/x-cmdf'], + ['cml', 'chemical/x-cml'], + ['cmp', 'application/vnd.yellowriver-custom-menu'], + ['cmx', 'image/x-cmx'], + ['cod', 'application/vnd.rim.cod'], + ['com', 'application/x-msdownload'], + ['conf', 'text/plain'], + ['cpio', 'application/x-cpio'], + ['cpp', 'text/x-c'], + ['cpt', 'application/mac-compactpro'], + ['crd', 'application/x-mscardfile'], + ['crl', 'application/pkix-crl'], + ['crt', 'application/x-x509-ca-cert'], + ['csh', 'application/x-csh'], + ['csml', 'chemical/x-csml'], + ['csp', 'application/vnd.commonspace'], + ['css', 'text/css'], + ['cst', 'application/x-director'], + ['csv', 'text/csv'], + ['cu', 'application/cu-seeme'], + ['curl', 'text/vnd.curl'], + ['cww', 'application/prs.cww'], + ['cxt', 'application/x-director'], + ['cxx', 'text/x-c'], + ['daf', 'application/vnd.mobius.daf'], + ['dataless', 'application/vnd.fdsn.seed'], + ['davmount', 'application/davmount+xml'], + ['dcr', 'application/x-director'], + ['dcurl', 'text/vnd.curl.dcurl'], + ['dd2', 'application/vnd.oma.dd2+xml'], + ['ddd', 'application/vnd.fujixerox.ddd'], + ['deb', 'application/x-debian-package'], + ['def', 'text/plain'], + ['deploy', 'application/octet-stream'], + ['der', 'application/x-x509-ca-cert'], + ['dfac', 'application/vnd.dreamfactory'], + ['dic', 'text/x-c'], + ['diff', 'text/plain'], + ['dir', 'application/x-director'], + ['dis', 'application/vnd.mobius.dis'], + ['dist', 'application/octet-stream'], + ['distz', 'application/octet-stream'], + ['djv', 'image/vnd.djvu'], + ['djvu', 'image/vnd.djvu'], + ['dll', 'application/x-msdownload'], + ['dmg', 'application/octet-stream'], + ['dms', 'application/octet-stream'], + ['dna', 'application/vnd.dna'], + ['doc', 'application/msword'], + ['docm', 'application/vnd.ms-word.document.macroenabled.12'], + [ + 'docx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ], + ['dot', 'application/msword'], + ['dotm', 'application/vnd.ms-word.template.macroenabled.12'], + [ + 'dotx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' + ], + ['dp', 'application/vnd.osgi.dp'], + ['dpg', 'application/vnd.dpgraph'], + ['dsc', 'text/prs.lines.tag'], + ['dtb', 'application/x-dtbook+xml'], + ['dtd', 'application/xml-dtd'], + ['dts', 'audio/vnd.dts'], + ['dtshd', 'audio/vnd.dts.hd'], + ['dump', 'application/octet-stream'], + ['dvi', 'application/x-dvi'], + ['dwf', 'model/vnd.dwf'], + ['dwg', 'image/vnd.dwg'], + ['dws', 'application/octet-stream'], + ['dwt', 'application/x-autocad'], + ['dxf', 'image/vnd.dxf'], + ['dxp', 'application/vnd.spotfire.dxp'], + ['dxr', 'application/x-director'], + ['ecelp4800', 'audio/vnd.nuera.ecelp4800'], + ['ecelp7470', 'audio/vnd.nuera.ecelp7470'], + ['ecelp9600', 'audio/vnd.nuera.ecelp9600'], + ['ecma', 'application/ecmascript'], + ['edm', 'application/vnd.novadigm.edm'], + ['edx', 'application/vnd.novadigm.edx'], + ['efif', 'application/vnd.picsel'], + ['egg', 'application/x-egg'], + ['ei6', 'application/vnd.pg.osasli'], + ['elc', 'application/octet-stream'], + ['emf', 'image/emf'], + ['eml', 'message/rfc822'], + ['emma', 'application/emma+xml'], + ['eol', 'audio/vnd.digital-winds'], + ['eot', 'application/vnd.ms-fontobject'], + ['eps', 'application/postscript'], + ['epub', 'application/epub+zip'], + ['es3', 'application/vnd.eszigno3+xml'], + ['esf', 'application/vnd.epson.esf'], + ['et3', 'application/vnd.eszigno3+xml'], + ['etx', 'text/x-setext'], + ['exe', 'application/x-msdownload'], + ['ext', 'application/vnd.novadigm.ext'], + ['ez', 'application/andrew-inset'], + ['ez2', 'application/vnd.ezpix-album'], + ['ez3', 'application/vnd.ezpix-package'], + ['f', 'text/x-fortran'], + ['f4v', 'video/x-f4v'], + ['f77', 'text/x-fortran'], + ['f90', 'text/x-fortran'], + ['fbs', 'image/vnd.fastbidsheet'], + ['fdf', 'application/vnd.fdf'], + ['fe_launch', 'application/vnd.denovo.fcselayout-link'], + ['fg5', 'application/vnd.fujitsu.oasysgp'], + ['fgd', 'application/x-director'], + ['fh', 'image/x-freehand'], + ['fh4', 'image/x-freehand'], + ['fh5', 'image/x-freehand'], + ['fh7', 'image/x-freehand'], + ['fhc', 'image/x-freehand'], + ['fig', 'application/x-xfig'], + ['fla', 'application/octet-stream'], + ['flac', 'audio/flac'], + ['fli', 'video/x-fli'], + ['flo', 'application/vnd.micrografx.flo'], + ['flv', 'video/x-flv'], + ['flw', 'application/vnd.kde.kivio'], + ['flx', 'text/vnd.fmi.flexstor'], + ['fly', 'text/vnd.fly'], + ['fm', 'application/vnd.framemaker'], + ['fnc', 'application/vnd.frogans.fnc'], + ['for', 'text/x-fortran'], + ['fpx', 'image/vnd.fpx'], + ['frame', 'application/vnd.framemaker'], + ['fsc', 'application/vnd.fsc.weblaunch'], + ['fst', 'image/vnd.fst'], + ['ftc', 'application/vnd.fluxtime.clip'], + ['fti', 'application/vnd.anser-web-funds-transfer-initiation'], + ['fvt', 'video/vnd.fvt'], + ['fzs', 'application/vnd.fuzzysheet'], + ['g3', 'image/g3fax'], + ['gac', 'application/vnd.groove-account'], + ['gdl', 'model/vnd.gdl'], + ['geo', 'application/vnd.dynageo'], + ['gex', 'application/vnd.geometry-explorer'], + ['ggb', 'application/vnd.geogebra.file'], + ['ggt', 'application/vnd.geogebra.tool'], + ['ghf', 'application/vnd.groove-help'], + ['gif', 'image/gif'], + ['gim', 'application/vnd.groove-identity-message'], + ['gmx', 'application/vnd.gmx'], + ['gnumeric', 'application/x-gnumeric'], + ['gph', 'application/vnd.flographit'], + ['gqf', 'application/vnd.grafeq'], + ['gqs', 'application/vnd.grafeq'], + ['gram', 'application/srgs'], + ['gre', 'application/vnd.geometry-explorer'], + ['grv', 'application/vnd.groove-injector'], + ['grxml', 'application/srgs+xml'], + ['gsf', 'application/x-font-ghostscript'], + ['gtar', 'application/x-gtar'], + ['gtm', 'application/vnd.groove-tool-message'], + ['gtw', 'model/vnd.gtw'], + ['gv', 'text/vnd.graphviz'], + ['gz', 'application/x-gzip'], + ['h', 'text/x-c'], + ['h261', 'video/h261'], + ['h263', 'video/h263'], + ['h264', 'video/h264'], + ['hbci', 'application/vnd.hbci'], + ['hdf', 'application/x-hdf'], + ['hh', 'text/x-c'], + ['hlp', 'application/winhlp'], + ['hpgl', 'application/vnd.hp-hpgl'], + ['hpid', 'application/vnd.hp-hpid'], + ['hps', 'application/vnd.hp-hps'], + ['hqx', 'application/mac-binhex40'], + ['htke', 'application/vnd.kenameaapp'], + ['htm', 'text/html'], + ['html', 'text/html'], + ['hvd', 'application/vnd.yamaha.hv-dic'], + ['hvp', 'application/vnd.yamaha.hv-voice'], + ['hvs', 'application/vnd.yamaha.hv-script'], + ['hwp', 'application/x-hwp'], + ['icc', 'application/vnd.iccprofile'], + ['ice', 'x-conference/x-cooltalk'], + ['icm', 'application/vnd.iccprofile'], + ['ico', 'image/x-icon'], + ['ics', 'text/calendar'], + ['ief', 'image/ief'], + ['ifb', 'text/calendar'], + ['ifm', 'application/vnd.shana.informed.formdata'], + ['iges', 'model/iges'], + ['igl', 'application/vnd.igloader'], + ['igs', 'model/iges'], + ['igx', 'application/vnd.micrografx.igx'], + ['iif', 'application/vnd.shana.informed.interchange'], + ['imp', 'application/vnd.accpac.simply.imp'], + ['ims', 'application/vnd.ms-ims'], + ['in', 'text/plain'], + ['ipk', 'application/vnd.shana.informed.package'], + ['irm', 'application/vnd.ibm.rights-management'], + ['irp', 'application/vnd.irepository.package+xml'], + ['iso', 'application/octet-stream'], + ['itp', 'application/vnd.shana.informed.formtemplate'], + ['ivp', 'application/vnd.immervision-ivp'], + ['ivu', 'application/vnd.immervision-ivu'], + ['jad', 'text/vnd.sun.j2me.app-descriptor'], + ['jam', 'application/vnd.jam'], + ['jar', 'application/java-archive'], + ['java', 'text/x-java-source'], + ['jisp', 'application/vnd.jisp'], + ['jlt', 'application/vnd.hp-jlyt'], + ['jnlp', 'application/x-java-jnlp-file'], + ['joda', 'application/vnd.joost.joda-archive'], + ['jpe', 'image/jpeg'], + ['jpeg', 'image/jpeg'], + ['jpg', 'image/jpeg'], + ['jpgm', 'video/jpm'], + ['jpgv', 'video/jpeg'], + ['jpm', 'video/jpm'], + ['js', 'application/javascript'], + ['json', 'application/json'], + ['kar', 'audio/midi'], + ['karbon', 'application/vnd.kde.karbon'], + ['keynote', 'application/vnd.apple.keynote'], + ['kfo', 'application/vnd.kde.kformula'], + ['kia', 'application/vnd.kidspiration'], + ['kil', 'application/x-killustrator'], + ['kml', 'application/vnd.google-earth.kml+xml'], + ['kmz', 'application/vnd.google-earth.kmz'], + ['kne', 'application/vnd.kinar'], + ['knp', 'application/vnd.kinar'], + ['kon', 'application/vnd.kde.kontour'], + ['kpr', 'application/vnd.kde.kpresenter'], + ['kpt', 'application/vnd.kde.kpresenter'], + ['ksh', 'text/plain'], + ['ksp', 'application/vnd.kde.kspread'], + ['ktr', 'application/vnd.kahootz'], + ['ktz', 'application/vnd.kahootz'], + ['kwd', 'application/vnd.kde.kword'], + ['kwt', 'application/vnd.kde.kword'], + ['latex', 'application/x-latex'], + ['lbd', 'application/vnd.llamagraphics.life-balance.desktop'], + ['lbe', 'application/vnd.llamagraphics.life-balance.exchange+xml'], + ['les', 'application/vnd.hhe.lesson-player'], + ['lha', 'application/octet-stream'], + ['link66', 'application/vnd.route66.link66+xml'], + ['list', 'text/plain'], + ['list3820', 'application/vnd.ibm.modcap'], + ['listafp', 'application/vnd.ibm.modcap'], + ['log', 'text/plain'], + ['lostxml', 'application/lost+xml'], + ['lrf', 'application/octet-stream'], + ['lrm', 'application/vnd.ms-lrm'], + ['ltf', 'application/vnd.frogans.ltf'], + ['lvp', 'audio/vnd.lucent.voice'], + ['lwp', 'application/vnd.lotus-wordpro'], + ['lzh', 'application/octet-stream'], + ['m13', 'application/x-msmediaview'], + ['m14', 'application/x-msmediaview'], + ['m1v', 'video/mpeg'], + ['m2a', 'audio/mpeg'], + ['m2v', 'video/mpeg'], + ['m3a', 'audio/mpeg'], + ['m3u', 'audio/x-mpegurl'], + ['m4a', 'audio/x-m4a'], + ['m4u', 'video/vnd.mpegurl'], + ['m4v', 'video/x-m4v'], + ['ma', 'application/mathematica'], + ['mag', 'application/vnd.ecowin.chart'], + ['maker', 'application/vnd.framemaker'], + ['man', 'text/troff'], + ['mathml', 'application/mathml+xml'], + ['mb', 'application/mathematica'], + ['mbk', 'application/vnd.mobius.mbk'], + ['mbox', 'application/mbox'], + ['mc1', 'application/vnd.medcalcdata'], + ['mcd', 'application/vnd.mcd'], + ['mcurl', 'text/vnd.curl.mcurl'], + ['mdb', 'application/x-msaccess'], + ['mdi', 'image/vnd.ms-modi'], + ['me', 'text/troff'], + ['mesh', 'model/mesh'], + ['mfm', 'application/vnd.mfmp'], + ['mgz', 'application/vnd.proteus.magazine'], + ['mht', 'message/rfc822'], + ['mhtml', 'message/rfc822'], + ['mid', 'audio/midi'], + ['midi', 'audio/midi'], + ['mif', 'application/vnd.mif'], + ['mime', 'message/rfc822'], + ['mj2', 'video/mj2'], + ['mjp2', 'video/mj2'], + ['mkv', 'video/x-matroska'], + ['mlp', 'application/vnd.dolby.mlp'], + ['mmd', 'application/vnd.chipnuts.karaoke-mmd'], + ['mmf', 'application/vnd.smaf'], + ['mmr', 'image/vnd.fujixerox.edmics-mmr'], + ['mny', 'application/x-msmoney'], + ['mobi', 'application/x-mobipocket-ebook'], + ['mov', 'video/quicktime'], + ['movie', 'video/x-sgi-movie'], + ['mp2', 'audio/mpeg'], + ['mp2a', 'audio/mpeg'], + ['mp3', 'audio/mpeg'], + ['mp4', 'video/mp4'], + ['mp4a', 'audio/mp4'], + ['mp4s', 'application/mp4'], + ['mp4v', 'video/mp4'], + ['mpa', 'video/mpeg'], + ['mpc', 'application/vnd.mophun.certificate'], + ['mpe', 'video/mpeg'], + ['mpeg', 'video/mpeg'], + ['mpega', 'audio/mpeg'], + ['mpg', 'video/mpeg'], + ['mpg4', 'video/mp4'], + ['mpga', 'audio/mpeg'], + ['mpkg', 'application/vnd.apple.installer+xml'], + ['mpm', 'application/vnd.blueice.multipass'], + ['mpn', 'application/vnd.mophun.application'], + ['mpp', 'application/vnd.ms-project'], + ['mpt', 'application/vnd.ms-project'], + ['mpy', 'application/vnd.ibm.minipay'], + ['mqy', 'application/vnd.mobius.mqy'], + ['mrc', 'application/marc'], + ['ms', 'text/troff'], + ['mscml', 'application/mediaservercontrol+xml'], + ['mseed', 'application/vnd.fdsn.mseed'], + ['mseq', 'application/vnd.mseq'], + ['msf', 'application/vnd.epson.msf'], + ['msh', 'model/mesh'], + ['msi', 'application/x-msdownload'], + ['msl', 'application/vnd.mobius.msl'], + ['msty', 'application/vnd.muvee.style'], + ['mts', 'model/vnd.mts'], + ['mus', 'application/vnd.musician'], + ['musicxml', 'application/vnd.recordare.musicxml+xml'], + ['mvb', 'application/x-msmediaview'], + ['mwf', 'application/vnd.mfer'], + ['mxf', 'application/mxf'], + ['mxl', 'application/vnd.recordare.musicxml'], + ['mxml', 'application/xv+xml'], + ['mxs', 'application/vnd.triscape.mxs'], + ['mxu', 'video/vnd.mpegurl'], + ['n-gage', 'application/vnd.nokia.n-gage.symbian.install'], + ['nb', 'application/mathematica'], + ['nc', 'application/x-netcdf'], + ['ncx', 'application/x-dtbncx+xml'], + ['ngdat', 'application/vnd.nokia.n-gage.data'], + ['nlu', 'application/vnd.neurolanguage.nlu'], + ['nml', 'application/vnd.enliven'], + ['nnd', 'application/vnd.noblenet-directory'], + ['nns', 'application/vnd.noblenet-sealer'], + ['nnw', 'application/vnd.noblenet-web'], + ['npx', 'image/vnd.net-fpx'], + ['nsf', 'application/vnd.lotus-notes'], + ['numbers', 'application/vnd.apple.numbers'], + ['nws', 'message/rfc822'], + ['o', 'application/octet-stream'], + ['oa2', 'application/vnd.fujitsu.oasys2'], + ['oa3', 'application/vnd.fujitsu.oasys3'], + ['oas', 'application/vnd.fujitsu.oasys'], + ['obd', 'application/x-msbinder'], + ['obj', 'application/octet-stream'], + ['oda', 'application/oda'], + ['odb', 'application/vnd.oasis.opendocument.database'], + ['odc', 'application/vnd.oasis.opendocument.chart'], + ['odf', 'application/vnd.oasis.opendocument.formula'], + ['odft', 'application/vnd.oasis.opendocument.formula-template'], + ['odg', 'application/vnd.oasis.opendocument.graphics'], + ['odi', 'application/vnd.oasis.opendocument.image'], + ['odp', 'application/vnd.oasis.opendocument.presentation'], + ['ods', 'application/vnd.oasis.opendocument.spreadsheet'], + ['odt', 'application/vnd.oasis.opendocument.text'], + ['oga', 'audio/ogg'], + ['ogg', 'audio/ogg'], + ['ogv', 'video/ogg'], + ['ogx', 'application/ogg'], + ['one', 'application/msonenote'], + ['onepkg', 'application/onenote'], + ['onetmp', 'application/onenote'], + ['onetoc', 'application/onenote'], + ['onetoc2', 'application/onenote'], + ['opf', 'application/oebps-package+xml'], + ['oprc', 'application/vnd.palm'], + ['org', 'application/vnd.lotus-organizer'], + ['osf', 'application/vnd.yamaha.openscoreformat'], + ['osfpvg', 'application/vnd.yamaha.openscoreformat.osfpvg+xml'], + ['otc', 'application/vnd.oasis.opendocument.chart-template'], + ['otf', 'application/x-font-otf'], + ['otg', 'application/vnd.oasis.opendocument.graphics-template'], + ['oth', 'application/vnd.oasis.opendocument.text-web'], + ['oti', 'application/vnd.oasis.opendocument.image-template'], + ['otm', 'application/vnd.oasis.opendocument.text-master'], + ['otp', 'application/vnd.oasis.opendocument.presentation-template'], + ['ots', 'application/vnd.oasis.opendocument.spreadsheet-template'], + ['ott', 'application/vnd.oasis.opendocument.text-template'], + ['oxt', 'application/vnd.openofficeorg.extension'], + ['p', 'text/x-pascal'], + ['p10', 'application/pkcs10'], + ['p12', 'application/x-pkcs12'], + ['p7b', 'application/x-pkcs7-certificates'], + ['p7c', 'application/pkcs7-mime'], + ['p7m', 'application/pkcs7-mime'], + ['p7r', 'application/x-pkcs7-certreqresp'], + ['p7s', 'application/pkcs7-signature'], + ['pas', 'text/x-pascal'], + ['pages', 'application/vnd.apple.pages'], + ['pbd', 'application/vnd.powerbuilder6'], + ['pbm', 'image/x-portable-bitmap'], + ['pcf', 'application/x-font-pcf'], + ['pcl', 'application/vnd.hp-pcl'], + ['pclxl', 'application/vnd.hp-pclxl'], + ['pct', 'image/x-pict'], + ['pcurl', 'application/vnd.curl.pcurl'], + ['pcx', 'image/x-pcx'], + ['pdb', 'application/vnd.palm'], + ['pdf', 'application/pdf'], + ['pfa', 'application/x-font-type1'], + ['pfb', 'application/x-font-type1'], + ['pfm', 'application/x-font-type1'], + ['pfr', 'application/font-tdpfr'], + ['pfx', 'application/x-pkcs12'], + ['pgm', 'image/x-portable-graymap'], + ['pgn', 'application/x-chess-pgn'], + ['pgp', 'application/pgp-encrypted'], + ['pic', 'image/x-pict'], + ['pkg', 'application/octet-stream'], + ['pki', 'application/pkixcmp'], + ['pkipath', 'application/pkix-pkipath'], + ['pl', 'text/plain'], + ['plb', 'application/vnd.3gpp.pic-bw-large'], + ['plc', 'application/vnd.mobius.plc'], + ['plf', 'application/vnd.pocketlearn'], + ['pls', 'application/pls+xml'], + ['plt', 'Application/octet-stream'], + ['pml', 'application/vnd.ctc-posml'], + ['png', 'image/png'], + ['pnm', 'image/x-portable-anymap'], + ['portpkg', 'application/vnd.macports.portpkg'], + ['pot', 'application/vnd.ms-powerpoint'], + ['potm', 'application/vnd.ms-powerpoint.template.macroenabled.12'], + [ + 'potx', + 'application/vnd.openxmlformats-officedocument.presentationml.template' + ], + ['ppa', 'application/vnd.ms-powerpoint'], + ['ppam', 'application/vnd.ms-powerpoint.addin.macroenabled.12'], + ['ppd', 'application/vnd.cups-ppd'], + ['ppm', 'image/x-portable-pixmap'], + ['pps', 'application/vnd.ms-powerpoint'], + ['ppsm', 'application/vnd.ms-powerpoint.slideshow.macroenabled.12'], + [ + 'ppsx', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' + ], + ['ppt', 'application/vnd.ms-powerpoint'], + ['pptm', 'application/vnd.ms-powerpoint.presentation.macroenabled.12'], + [ + 'pptx', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + ], + ['pqa', 'application/vnd.palm'], + ['prc', 'application/x-mobipocket-ebook'], + ['pre', 'application/vnd.lotus-freelance'], + ['prf', 'application/pics-rules'], + ['ps', 'application/postscript'], + ['psb', 'application/vnd.3gpp.pic-bw-small'], + ['psd', 'image/vnd.adobe.photoshop'], + ['psf', 'application/x-font-linux-psf'], + ['ptid', 'application/vnd.pvi.ptid1'], + ['pub', 'application/x-mspublisher'], + ['pvb', 'application/vnd.3gpp.pic-bw-var'], + ['pwn', 'application/vnd.3m.post-it-notes'], + ['pwz', 'application/vnd.ms-powerpoint'], + ['py', 'text/x-python'], + ['pya', 'audio/vnd.ms-playready.media.pya'], + ['pyc', 'application/x-python-code'], + ['pyo', 'application/x-python-code'], + ['pyv', 'video/vnd.ms-playready.media.pyv'], + ['qam', 'application/vnd.epson.quickanime'], + ['qbo', 'application/vnd.intu.qbo'], + ['qfx', 'application/vnd.intu.qfx'], + ['qps', 'application/vnd.publishare-delta-tree'], + ['qt', 'video/quicktime'], + ['qwd', 'application/vnd.quark.quarkxpress'], + ['qwt', 'application/vnd.quark.quarkxpress'], + ['qxb', 'application/vnd.quark.quarkxpress'], + ['qxd', 'application/vnd.quark.quarkxpress'], + ['qxl', 'application/vnd.quark.quarkxpress'], + ['qxt', 'application/vnd.quark.quarkxpress'], + ['ra', 'audio/x-pn-realaudio'], + ['ram', 'audio/x-pn-realaudio'], + ['rar', 'application/x-rar-compressed'], + ['ras', 'image/x-cmu-raster'], + ['rcprofile', 'application/vnd.ipunplugged.rcprofile'], + ['rdf', 'application/rdf+xml'], + ['rdz', 'application/vnd.data-vision.rdz'], + ['rep', 'application/vnd.businessobjects'], + ['res', 'application/x-dtbresource+xml'], + ['rgb', 'image/x-rgb'], + ['rif', 'application/reginfo+xml'], + ['rl', 'application/resource-lists+xml'], + ['rlc', 'image/vnd.fujixerox.edmics-rlc'], + ['rld', 'application/resource-lists-diff+xml'], + ['rm', 'application/vnd.rn-realmedia'], + ['rmi', 'audio/midi'], + ['rmp', 'audio/x-pn-realaudio-plugin'], + ['rms', 'application/vnd.jcp.javame.midlet-rms'], + ['rnc', 'application/relax-ng-compact-syntax'], + ['roff', 'text/troff'], + ['rpm', 'application/x-rpm'], + ['rpss', 'application/vnd.nokia.radio-presets'], + ['rpst', 'application/vnd.nokia.radio-preset'], + ['rq', 'application/sparql-query'], + ['rs', 'application/rls-services+xml'], + ['rsd', 'application/rsd+xml'], + ['rss', 'application/rss+xml'], + ['rtf', 'application/rtf'], + ['rtx', 'text/richtext'], + ['rv', 'video/vnd.rn-realvideo'], + ['s', 'text/x-asm'], + ['saf', 'application/vnd.yamaha.smaf-audio'], + ['sbml', 'application/sbml+xml'], + ['sc', 'application/vnd.ibm.secure-container'], + ['scd', 'application/x-msschedule'], + ['scm', 'application/vnd.lotus-screencam'], + ['scq', 'application/scvp-cv-request'], + ['scs', 'application/scvp-cv-response'], + ['scurl', 'text/vnd.curl.scurl'], + ['sda', 'application/vnd.stardivision.draw'], + ['sdc', 'application/vnd.stardivision.calc'], + ['sdd', 'application/vnd.stardivision.impress'], + ['sdkd', 'application/vnd.solent.sdkm+xml'], + ['sdkm', 'application/vnd.solent.sdkm+xml'], + ['sdp', 'application/sdp'], + ['sdw', 'application/vnd.stardivision.writer'], + ['see', 'application/vnd.seemail'], + ['seed', 'application/vnd.fdsn.seed'], + ['sema', 'application/vnd.sema'], + ['semd', 'application/vnd.semd'], + ['semf', 'application/vnd.semf'], + ['ser', 'application/java-serialized-object'], + ['setpay', 'application/set-payment-initiation'], + ['setreg', 'application/set-registration-initiation'], + ['sfd-hdstx', 'application/vnd.hydrostatix.sof-data'], + ['sfs', 'application/vnd.spotfire.sfs'], + ['sgl', 'application/vnd.stardivision.writer-global'], + ['sgm', 'text/sgml'], + ['sgml', 'text/sgml'], + ['sh', 'application/x-sh'], + ['shar', 'application/x-shar'], + ['shf', 'application/shf+xml'], + ['si', 'text/vnd.wap.si'], + ['sic', 'application/vnd.wap.sic'], + ['sig', 'application/pgp-signature'], + ['silo', 'model/mesh'], + ['sis', 'application/vnd.symbian.install'], + ['sisx', 'application/vnd.symbian.install'], + ['sit', 'application/x-stuffit'], + ['sitx', 'application/x-stuffitx'], + ['skd', 'application/vnd.koan'], + ['skm', 'application/vnd.koan'], + ['skp', 'application/vnd.koan'], + ['skt', 'application/vnd.koan'], + ['sl', 'text/vnd.wap.sl'], + ['slc', 'application/vnd.wap.slc'], + ['sldm', 'application/vnd.ms-powerpoint.slide.macroenabled.12'], + [ + 'sldx', + 'application/vnd.openxmlformats-officedocument.presentationml.slide' + ], + ['slt', 'application/vnd.epson.salt'], + ['smf', 'application/vnd.stardivision.math'], + ['smi', 'application/smil+xml'], + ['smil', 'application/smil+xml'], + ['snd', 'audio/basic'], + ['snf', 'application/x-font-snf'], + ['so', 'application/octet-stream'], + ['spc', 'application/x-pkcs7-certificates'], + ['spf', 'application/vnd.yamaha.smaf-phrase'], + ['spl', 'application/x-futuresplash'], + ['spot', 'text/vnd.in3d.spot'], + ['spp', 'application/scvp-vp-response'], + ['spq', 'application/scvp-vp-request'], + ['spx', 'audio/ogg'], + ['src', 'application/x-wais-source'], + ['srx', 'application/sparql-results+xml'], + ['sse', 'application/vnd.kodak-descriptor'], + ['ssf', 'application/vnd.epson.ssf'], + ['ssml', 'application/ssml+xml'], + ['stc', 'application/vnd.sun.xml.calc.template'], + ['std', 'application/vnd.sun.xml.draw.template'], + ['stf', 'application/vnd.wt.stf'], + ['sti', 'application/vnd.sun.xml.impress.template'], + ['stk', 'application/hyperstudio'], + ['stl', 'application/vnd.ms-pki.stl'], + ['str', 'application/vnd.pg.format'], + ['stw', 'application/vnd.sun.xml.writer.template'], + ['sus', 'application/vnd.sus-calendar'], + ['susp', 'application/vnd.sus-calendar'], + ['sv4cpio', 'application/x-sv4cpio'], + ['sv4crc', 'application/x-sv4crc'], + ['svd', 'application/vnd.svd'], + ['svg', 'image/svg+xml'], + ['svgz', 'image/svg+xml'], + ['swa', 'application/x-director'], + ['swf', 'application/x-shockwave-flash'], + ['swi', 'application/vnd.arastra.swi'], + ['sxc', 'application/vnd.sun.xml.calc'], + ['sxd', 'application/vnd.sun.xml.draw'], + ['sxg', 'application/vnd.sun.xml.writer.global'], + ['sxi', 'application/vnd.sun.xml.impress'], + ['sxm', 'application/vnd.sun.xml.math'], + ['sxw', 'application/vnd.sun.xml.writer'], + ['t', 'text/troff'], + ['tao', 'application/vnd.tao.intent-module-archive'], + ['tar', 'application/x-tar'], + ['tcap', 'application/vnd.3gpp2.tcap'], + ['tcl', 'application/x-tcl'], + ['teacher', 'application/vnd.smart.teacher'], + ['tex', 'application/x-tex'], + ['texi', 'application/x-texinfo'], + ['texinfo', 'application/x-texinfo'], + ['text', 'text/plain'], + ['tfm', 'application/x-tex-tfm'], + ['tgz', 'application/x-gzip'], + ['tif', 'image/tiff'], + ['tiff', 'image/tiff'], + ['tmo', 'application/vnd.tmobile-livetv'], + ['torrent', 'application/x-bittorrent'], + ['tpl', 'application/vnd.groove-tool-template'], + ['tpt', 'application/vnd.trid.tpt'], + ['tr', 'text/troff'], + ['tra', 'application/vnd.trueapp'], + ['trm', 'application/x-msterminal'], + ['ts', 'video/MP2T'], + ['tsv', 'text/tab-separated-values'], + ['ttc', 'application/x-font-ttf'], + ['ttf', 'application/x-font-ttf'], + ['twd', 'application/vnd.simtech-mindmapper'], + ['twds', 'application/vnd.simtech-mindmapper'], + ['txd', 'application/vnd.genomatix.tuxedo'], + ['txf', 'application/vnd.mobius.txf'], + ['txt', 'text/plain'], + ['u32', 'application/x-authorware-bin'], + ['udeb', 'application/x-debian-package'], + ['ufd', 'application/vnd.ufdl'], + ['ufdl', 'application/vnd.ufdl'], + ['umj', 'application/vnd.umajin'], + ['unityweb', 'application/vnd.unity'], + ['uoml', 'application/vnd.uoml+xml'], + ['uri', 'text/uri-list'], + ['uris', 'text/uri-list'], + ['urls', 'text/uri-list'], + ['ustar', 'application/x-ustar'], + ['utz', 'application/vnd.uiq.theme'], + ['uu', 'text/x-uuencode'], + ['vcd', 'application/x-cdlink'], + ['vcf', 'text/x-vcard'], + ['vcg', 'application/vnd.groove-vcard'], + ['vcs', 'text/x-vcalendar'], + ['vcx', 'application/vnd.vcx'], + ['vis', 'application/vnd.visionary'], + ['viv', 'video/vnd.vivo'], + ['vor', 'application/vnd.stardivision.writer'], + ['vox', 'application/x-authorware-bin'], + ['vrml', 'model/vrml'], + ['vsd', 'application/vnd.visio'], + ['vsf', 'application/vnd.vsf'], + ['vss', 'application/vnd.visio'], + ['vst', 'application/vnd.visio'], + ['vsw', 'application/vnd.visio'], + ['vtu', 'model/vnd.vtu'], + ['vxml', 'application/voicexml+xml'], + ['w3d', 'application/x-director'], + ['wad', 'application/x-doom'], + ['wav', 'audio/x-wav'], + ['wax', 'audio/x-ms-wax'], + ['wbmp', 'image/vnd.wap.wbmp'], + ['wbs', 'application/vnd.criticaltools.wbs+xml'], + ['wbxml', 'application/vnd.wap.wbxml'], + ['wcm', 'application/vnd.ms-works'], + ['wdb', 'application/vnd.ms-works'], + ['webm', 'video/webm'], + ['wiz', 'application/msword'], + ['wks', 'application/vnd.ms-works'], + ['wm', 'video/x-ms-wm'], + ['wma', 'audio/x-ms-wma'], + ['wmd', 'application/x-ms-wmd'], + ['wmf', 'application/x-msmetafile'], + ['wml', 'text/vnd.wap.wml'], + ['wmlc', 'application/vnd.wap.wmlc'], + ['wmls', 'text/vnd.wap.wmlscript'], + ['wmlsc', 'application/vnd.wap.wmlscriptc'], + ['wmv', 'video/x-ms-wmv'], + ['wmx', 'video/x-ms-wmx'], + ['wmz', 'application/x-ms-wmz'], + ['wpd', 'application/vnd.wordperfect'], + ['wpl', 'application/vnd.ms-wpl'], + ['wps', 'application/vnd.ms-works'], + ['wqd', 'application/vnd.wqd'], + ['wri', 'application/x-mswrite'], + ['wrl', 'model/vrml'], + ['wsdl', 'application/wsdl+xml'], + ['wspolicy', 'application/wspolicy+xml'], + ['wtb', 'application/vnd.webturbo'], + ['wvx', 'video/x-ms-wvx'], + ['x32', 'application/x-authorware-bin'], + ['x3d', 'application/vnd.hzn-3d-crossword'], + ['xap', 'application/x-silverlight-app'], + ['xar', 'application/vnd.xara'], + ['xbap', 'application/x-ms-xbap'], + ['xbd', 'application/vnd.fujixerox.docuworks.binder'], + ['xbm', 'image/x-xbitmap'], + ['xdm', 'application/vnd.syncml.dm+xml'], + ['xdp', 'application/vnd.adobe.xdp+xml'], + ['xdw', 'application/vnd.fujixerox.docuworks'], + ['xenc', 'application/xenc+xml'], + ['xer', 'application/patch-ops-error+xml'], + ['xfdf', 'application/vnd.adobe.xfdf'], + ['xfdl', 'application/vnd.xfdl'], + ['xht', 'application/xhtml+xml'], + ['xhtml', 'application/xhtml+xml'], + ['xhvml', 'application/xv+xml'], + ['xif', 'image/vnd.xiff'], + ['xla', 'application/vnd.ms-excel'], + ['xlam', 'application/vnd.ms-excel.addin.macroenabled.12'], + ['xlb', 'application/vnd.ms-excel'], + ['xlc', 'application/vnd.ms-excel'], + ['xlm', 'application/vnd.ms-excel'], + ['xls', 'application/vnd.ms-excel'], + ['xlsb', 'application/vnd.ms-excel.sheet.binary.macroenabled.12'], + ['xlsm', 'application/vnd.ms-excel.sheet.macroenabled.12'], + ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], + ['xlt', 'application/vnd.ms-excel'], + ['xltm', 'application/vnd.ms-excel.template.macroenabled.12'], + [ + 'xltx', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' + ], + ['xlw', 'application/vnd.ms-excel'], + ['xml', 'application/xml'], + ['xo', 'application/vnd.olpc-sugar'], + ['xop', 'application/xop+xml'], + ['xpdl', 'application/xml'], + ['xpi', 'application/x-xpinstall'], + ['xpm', 'image/x-xpixmap'], + ['xpr', 'application/vnd.is-xpr'], + ['xps', 'application/vnd.ms-xpsdocument'], + ['xpw', 'application/vnd.intercon.formnet'], + ['xpx', 'application/vnd.intercon.formnet'], + ['xsl', 'application/xml'], + ['xslt', 'application/xslt+xml'], + ['xsm', 'application/vnd.syncml+xml'], + ['xspf', 'application/xspf+xml'], + ['xul', 'application/vnd.mozilla.xul+xml'], + ['xvm', 'application/xv+xml'], + ['xvml', 'application/xv+xml'], + ['xwd', 'image/x-xwindowdump'], + ['xyz', 'chemical/x-xyz'], + ['zaz', 'application/vnd.zzazz.deck+xml'], + ['zip', 'application/zip'], + ['zir', 'application/vnd.zul'], + ['zirz', 'application/vnd.zul'], + ['zmm', 'application/vnd.handheld-entertainment+xml'] +]); + +export class MimeUtil { + static getMimeFromExtension(ext: string): string | undefined { + return MimeMap.get(ext); + } +} diff --git a/projects/ucap-webmessenger-core/src/public-api.ts b/projects/ucap-webmessenger-core/src/public-api.ts index b426d4aa..df10b4a9 100644 --- a/projects/ucap-webmessenger-core/src/public-api.ts +++ b/projects/ucap-webmessenger-core/src/public-api.ts @@ -21,4 +21,5 @@ export * from './lib/types/status-type.type'; export * from './lib/types/video-conference-type.type'; export * from './lib/utils/file.util'; +export * from './lib/utils/mime.util'; export * from './lib/utils/string.util'; diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.html b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.html index 0d22febe..f985506c 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.html +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.html @@ -9,6 +9,7 @@ [userSeq]="userSeq" [deviceType]="deviceType" [token]="token" + (download)="onDownload($event)" (closed)="onClosedViewer()" > diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.ts b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.ts index 3862f5d7..9824ba4e 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.ts +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer.component.ts @@ -27,6 +27,9 @@ export class FileViewerComponent implements OnInit { @Input() token: string; + @Output() + download = new EventEmitter(); + @Output() closed = new EventEmitter(); @@ -48,6 +51,9 @@ export class FileViewerComponent implements OnInit { return FileViewerType.Binary; } } + onDownload(blob: Blob): void { + this.download.emit(blob); + } onClosedViewer(): void { this.closed.emit(); diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/binary-viewer.component.ts b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/binary-viewer.component.ts index 81a0cfa3..d9710c38 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/binary-viewer.component.ts +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/binary-viewer.component.ts @@ -25,9 +25,19 @@ export class BinaryViewerComponent implements OnInit { @Input() token: string; + @Output() + download = new EventEmitter(); + @Output() closed = new EventEmitter(); constructor() {} + ngOnInit() {} + + onClickDownload(): void {} + + onClickClose(): void { + this.closed.emit(); + } } diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/document-viewer.component.ts b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/document-viewer.component.ts index 44926295..1ac09a5a 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/document-viewer.component.ts +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/document-viewer.component.ts @@ -25,9 +25,19 @@ export class DocumentViewerComponent implements OnInit { @Input() token: string; + @Output() + download = new EventEmitter(); + @Output() closed = new EventEmitter(); constructor() {} + ngOnInit() {} + + onClickDownload(): void {} + + onClickClose(): void { + this.closed.emit(); + } } diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.html b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.html index 981db2ee..3f7f9d71 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.html +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.html @@ -1,5 +1,5 @@
- + image {{ fileInfo.fileName }} @@ -9,7 +9,7 @@ class="ucap-image-viewer-action" matTooltip="이미지 크기 재설정" matTooltipPosition="below" - aria-label="Button that displays a tooltip in various positions" + aria-label="" > settings_overscan @@ -18,7 +18,7 @@ class="ucap-image-viewer-action" matTooltip="축소" matTooltipPosition="below" - aria-label="Button that displays a tooltip in various positions" + aria-label="" > zoom_out @@ -27,7 +27,7 @@ class="ucap-image-viewer-action" matTooltip="확대" matTooltipPosition="below" - aria-label="Button that displays a tooltip in various positions" + aria-label="" > zoom_in @@ -36,7 +36,8 @@ class="ucap-image-viewer-action" matTooltip="다운로드" matTooltipPosition="below" - aria-label="Button that displays a tooltip in various positions" + aria-label="" + (click)="onClickDownload()" > get_app @@ -50,8 +51,20 @@ Close +
- - {{ fileDownloadItem.downloadingProgress$ | async }} +
+ +
diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.scss b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.scss index 936b5b31..23287cd0 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.scss +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.scss @@ -21,5 +21,11 @@ } .ucap-image-viewer-body { + position: relative; + width: 100%; + height: 100%; + + .ucap-image-viewer-image-wrapper { + } } } diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.ts b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.ts index 9c6a455e..c766fed1 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.ts +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/image-viewer.component.ts @@ -1,12 +1,13 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { ucapAnimations } from '../../animations'; import { FileEventJson } from '@ucap-webmessenger/protocol-event'; -import { DeviceType } from '@ucap-webmessenger/core'; +import { DeviceType, FileUtil, MimeUtil } from '@ucap-webmessenger/core'; import { CommonApiService, FileDownloadItem } from '@ucap-webmessenger/api-common'; import { take, map } from 'rxjs/operators'; +import { DomSanitizer } from '@angular/platform-browser'; @Component({ selector: 'ucap-image-viewer', @@ -33,15 +34,22 @@ export class ImageViewerComponent implements OnInit { @Output() closed = new EventEmitter(); - imageSrc: string; + @Output() + download = new EventEmitter(); + + blob: Blob; + imageSrc: string | ArrayBuffer; fileDownloadItem: FileDownloadItem; - constructor(private commonApiService: CommonApiService) {} + constructor( + private domSanitizer: DomSanitizer, + private commonApiService: CommonApiService + ) { + this.fileDownloadItem = new FileDownloadItem(); + } ngOnInit() { - this.fileDownloadItem = new FileDownloadItem(); - this.commonApiService .fileTalkDownload( { @@ -55,13 +63,22 @@ export class ImageViewerComponent implements OnInit { ) .pipe( take(1), - map(aaa => { - console.log('fileTalkDownload', aaa); + map(async blob => { + this.blob = blob.slice( + 0, + blob.size, + MimeUtil.getMimeFromExtension(this.fileInfo.fileExt) + ); + this.imageSrc = await FileUtil.toDataUrl(this.blob); }) ) .subscribe(); } + onClickDownload(): void { + this.download.emit(this.blob); + } + onClickClose(): void { this.closed.emit(); } diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/sound-viewer.component.ts b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/sound-viewer.component.ts index 06e025c3..f6968345 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/sound-viewer.component.ts +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/sound-viewer.component.ts @@ -25,9 +25,19 @@ export class SoundViewerComponent implements OnInit { @Input() token: string; + @Output() + download = new EventEmitter(); + @Output() closed = new EventEmitter(); constructor() {} + ngOnInit() {} + + onClickDownload(): void {} + + onClickClose(): void { + this.closed.emit(); + } } diff --git a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/video-viewer.component.ts b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/video-viewer.component.ts index e934f02c..4728ccbb 100644 --- a/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/video-viewer.component.ts +++ b/projects/ucap-webmessenger-ui/src/lib/components/file-viewer/video-viewer.component.ts @@ -25,9 +25,19 @@ export class VideoViewerComponent implements OnInit { @Input() token: string; + @Output() + download = new EventEmitter(); + @Output() closed = new EventEmitter(); constructor() {} + ngOnInit() {} + + onClickDownload(): void {} + + onClickClose(): void { + this.closed.emit(); + } } diff --git a/projects/ucap-webmessenger-ui/src/lib/directives/image.directive.ts b/projects/ucap-webmessenger-ui/src/lib/directives/image.directive.ts index d13bed19..412f15fb 100644 --- a/projects/ucap-webmessenger-ui/src/lib/directives/image.directive.ts +++ b/projects/ucap-webmessenger-ui/src/lib/directives/image.directive.ts @@ -5,8 +5,7 @@ import { Output, Input, AfterViewInit, - OnInit, - HostListener + OnInit } from '@angular/core'; import { NGXLogger } from 'ngx-logger'; @@ -28,7 +27,7 @@ export class ImageDirective implements OnInit, AfterViewInit { default: string; @Output() - loaded = new EventEmitter(); + loaded = new EventEmitter(); imageSrc: string; @@ -53,7 +52,7 @@ export class ImageDirective implements OnInit, AfterViewInit { ngAfterViewInit(): void { if (this.imageSrc === this.default) { this.elementRef.nativeElement.src = this.default; - this.loaded.emit(this.elementRef.nativeElement.src); + this.loaded.emit(this.elementRef.nativeElement); } else { this.elementRef.nativeElement.src = this.default; @@ -71,11 +70,11 @@ export class ImageDirective implements OnInit, AfterViewInit { return; } this.elementRef.nativeElement.src = image.src; - this.loaded.emit(this.elementRef.nativeElement.src); + this.loaded.emit(image); }; image.onerror = () => { this.elementRef.nativeElement.src = this.default; - this.loaded.emit(this.elementRef.nativeElement.src); + this.loaded.emit(this.elementRef.nativeElement); }; image.src = imageUrl; }