-
-
Save OllieJones/b435641f610ff6f2bb5e to your computer and use it in GitHub Desktop.
I like phantomjs, but it doesn't directly support getting images from webpages without requesting them separately like in casperjs. I went through QTNetworking code in the phantomjs repo until I figured out where the cache was. To use this, have all three files in the same directory. Then modify test.js for whatever you need.Call phantom js with…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var pFs = require('fs'); | |
//this is the path that QTNetwork classes uses for caching files for it's http client | |
//the path should be the one that has 16 folders labeled 0,1,2,3,...,F | |
exports.cachePath = '/path/to/phantomjs/cache/data/folder'; | |
//object path | |
exports.objectPath = '/path/to/phantomjs/cache/objects'; | |
//call this when you first encounter a resource//this is the extension used for files in the cache path | |
exports.cacheExtension = "d"; | |
//the resources that are to be saved | |
exports.cachedResources = new Array(); | |
//call this when you first encounter a resource | |
//includeResource takes the httpResponse from phanomjs and remembers it for later | |
exports.includeResource = function (httpResponse) { | |
if (!(httpResponse.url in exports.cachedResources)) { | |
exports.cachedResources[httpResponse.url] = new cachedResource(httpResponse); | |
} | |
} | |
//this takes an httpResponse and builds the object that will be used to get the file contents | |
function cachedResource(httpResponse) { | |
this.saved = false; | |
this.response = httpResponse; | |
this.cacheFile = getUrlCacheFilename(this.response.url); | |
this.leafName = httpResponse.url.leafName(); | |
this.cacheFileNoPath = this.cacheFile.clearBefore("/"); | |
this.mimetype = this.response.contentType.clearAfter(";"); | |
this.getContents = function () { | |
var reader = new CacheFile(exports.cachePath + this.cacheFile); | |
if (reader.valid && reader.plaintext) { | |
return reader.payload(); | |
} else return ""; | |
} | |
} | |
/* utility class to walk through a binary file */ | |
function BinaryReader(filename) { | |
this.filename = filename; | |
this.ptr = 0; | |
this.buf = pFs.read(filename, 'b'); | |
this.end = this.buf.length; | |
/* look ahead cnt bytes */ | |
this.peek = function (cnt) { | |
return this.buf.substr(this.ptr, cnt); | |
} | |
/* get cnt bytes into a string */ | |
this.get = function (cnt) { | |
if (this.ptr + cnt < this.end) { | |
var optr = this.ptr; | |
this.ptr = this.ptr + cnt | |
return this.buf.substr(optr, cnt); | |
} | |
else console.log(this.filename, 'overrun in get', this.cnt); | |
} | |
/* skip forward cnt bytes */ | |
this.skip = function (cnt) { | |
if (this.ptr + cnt < this.end) this.ptr = this.ptr + cnt; | |
else console.log('overrun in skip', cnt); | |
} | |
/* get a four byte big-endian integer */ | |
this.Uint32 = function () { | |
var d = this.get(4); | |
var r = d.charCodeAt(0); | |
for (var i = 1; i < 4; i++) r = (r * 256) + d.charCodeAt(i); | |
return r; | |
} | |
/* how many bytes remain ?*/ | |
this.remainingLength = function () { | |
return this.end - this.ptr; | |
} | |
/* fetch the remaining bytes */ | |
this.getRemaining = function () { | |
return this.buf.substr(this.ptr); | |
} | |
} | |
/* utility class to extract contents from a QNetworkDiskCache file */ | |
function CacheFile(filename) { | |
this.filename = filename; | |
var rdr = new BinaryReader(filename); | |
var totalLen = rdr.remainingLength(); | |
/* skip two 32-bit ints at beginning of file */ | |
rdr.skip(8); | |
/* fetch length of URL string */ | |
var len = rdr.Uint32(); | |
/* fetch URL string */ | |
this.url = rdr.get(len); | |
var frag = this.url.substr(1 + this.url.lastIndexOf('/')); | |
this.leafName = frag.indexOf('?') < 0 ? frag : frag.substr(0, frag.indexOf('?')); | |
this.headers = new Object(); | |
this.valid = false; | |
/* most cache files have 61 bytes of undocumented stuff. | |
* some, mostly items left behind by various kinds of redirects, | |
* have more. */ | |
rdr.skip(61); | |
/* fetch the number of HTTP headers stored in the file */ | |
var hdrCount = rdr.Uint32(); | |
/* reject the file if we find rubbish where the header counts should be. | |
* it means the 61-byte skip above was wrong for this file. */ | |
if (hdrCount <= 0 || hdrCount > 32) return false; | |
for (var i = 0; i < hdrCount; i++) { | |
/* for each header, fetch the tag length and length string */ | |
var len = rdr.Uint32(); | |
/* if string lengths are rubbish, it means the 61-byte skip above was wrong. */ | |
if (len <= 0 || len > 4095) return false; /* reject the file */ | |
var tag = rdr.get(len); | |
/* fetch the value length and length string */ | |
len = rdr.Uint32(); | |
if (len <= 0 || len > 4095) return false; | |
var val = rdr.get(len); | |
this.headers[tag] = val; | |
} | |
/* past the headers. One more byte until payload. */ | |
/* fetch the next byte. it's zero if the payload is uncompressed */ | |
this.plaintext = rdr.get(1).charCodeAt(0) == 0; | |
/* consistency checks */ | |
this.lengthmatch = this.headers['Content-Length'] == rdr.remainingLength(); | |
this.payload = function () { return rdr.getRemaining(); }; | |
this.payloadLength = rdr.remainingLength(); | |
this.valid = true; | |
} | |
//get the name of the file from the QNetworkDiskCache that phantomjs uses | |
function getUrlCacheFilename(url, littleEndian, cacheSuffix) { | |
//im lazy, so make the last two args optional | |
littleEndian = typeof littleEndian !== 'undefined' ? littleEndian : true; | |
cacheSuffix = typeof cacheSuffix !== 'undefined' ? cacheSuffix : '.d'; | |
//convert the sha1 digest to hex | |
//QT handles caching by converting the SHA1 hash to 64 bit qlonglong | |
// so the hash gets truncated to 8 bytes | |
var digest = SHA1(url).substring(0, 16).toString(); | |
//if this is a little endian system, reverse the bytes | |
var littleEndian = true; | |
if (littleEndian) { | |
var result = ""; | |
//the digest is in hex, so take 2 bytes at a time | |
for (var i = digest.length - 1; i > 0; i -= 2) { | |
result += digest.substr(i - 1, 2); | |
} | |
digest = result; | |
} | |
//convert to js int then to base 36 string, then truncate | |
var hash = parseInt(digest, 16).toString(36).substr(0, 8); | |
//in QT the filename of a cached url is hash[0]%16 + '/' + hash + '.d' | |
return (parseInt(hash.charCodeAt(hash.length - 1)) % 16).toString(16) + '/' + hash + cacheSuffix; | |
} | |
//get hex SHA1 digest of msg | |
//borrowed from http://www.webtoolkit.info/javascript-sha1.html | |
function SHA1(msg) { | |
function rotate_left(n, s) { | |
var t4 = (n << s) | (n >>> (32 - s)); | |
return t4; | |
}; | |
function lsb_hex(val) { | |
var str = ""; | |
var i; | |
var vh; | |
var vl; | |
for (i = 0; i <= 6; i += 2) { | |
vh = (val >>> (i * 4 + 4)) & 0x0f; | |
vl = (val >>> (i * 4)) & 0x0f; | |
str += vh.toString(16) + vl.toString(16); | |
} | |
return str; | |
}; | |
function cvt_hex(val) { | |
var str = ""; | |
var i; | |
var v; | |
for (i = 7; i >= 0; i--) { | |
v = (val >>> (i * 4)) & 0x0f; | |
str += v.toString(16); | |
} | |
return str; | |
}; | |
function Utf8Encode(string) { | |
string = string.replace(/\r\n/g, "\n"); | |
var utftext = ""; | |
for (var n = 0; n < string.length; n++) { | |
var c = string.charCodeAt(n); | |
if (c < 128) { | |
utftext += String.fromCharCode(c); | |
} | |
else if ((c > 127) && (c < 2048)) { | |
utftext += String.fromCharCode((c >> 6) | 192); | |
utftext += String.fromCharCode((c & 63) | 128); | |
} | |
else { | |
utftext += String.fromCharCode((c >> 12) | 224); | |
utftext += String.fromCharCode(((c >> 6) & 63) | 128); | |
utftext += String.fromCharCode((c & 63) | 128); | |
} | |
} | |
return utftext; | |
}; | |
var blockstart; | |
var i, j; | |
var W = new Array(80); | |
var H0 = 0x67452301; | |
var H1 = 0xEFCDAB89; | |
var H2 = 0x98BADCFE; | |
var H3 = 0x10325476; | |
var H4 = 0xC3D2E1F0; | |
var A, B, C, D, E; | |
var temp; | |
msg = Utf8Encode(msg); | |
var msg_len = msg.length; | |
var word_array = new Array(); | |
for (i = 0; i < msg_len - 3; i += 4) { | |
j = msg.charCodeAt(i) << 24 | msg.charCodeAt(i + 1) << 16 | | |
msg.charCodeAt(i + 2) << 8 | msg.charCodeAt(i + 3); | |
word_array.push(j); | |
} | |
switch (msg_len % 4) { | |
case 0: | |
i = 0x080000000; | |
break; | |
case 1: | |
i = msg.charCodeAt(msg_len - 1) << 24 | 0x0800000; | |
break; | |
case 2: | |
i = msg.charCodeAt(msg_len - 2) << 24 | msg.charCodeAt(msg_len - 1) << 16 | 0x08000; | |
break; | |
case 3: | |
i = msg.charCodeAt(msg_len - 3) << 24 | msg.charCodeAt(msg_len - 2) << 16 | msg.charCodeAt(msg_len - 1) << 8 | 0x80; | |
break; | |
} | |
word_array.push(i); | |
while ((word_array.length % 16) != 14) word_array.push(0); | |
word_array.push(msg_len >>> 29); | |
word_array.push((msg_len << 3) & 0x0ffffffff); | |
for (blockstart = 0; blockstart < word_array.length; blockstart += 16) { | |
for (i = 0; i < 16; i++) W[i] = word_array[blockstart + i]; | |
for (i = 16; i <= 79; i++) W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); | |
A = H0; | |
B = H1; | |
C = H2; | |
D = H3; | |
E = H4; | |
for (i = 0; i <= 19; i++) { | |
temp = (rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; | |
E = D; | |
D = C; | |
C = rotate_left(B, 30); | |
B = A; | |
A = temp; | |
} | |
for (i = 20; i <= 39; i++) { | |
temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; | |
E = D; | |
D = C; | |
C = rotate_left(B, 30); | |
B = A; | |
A = temp; | |
} | |
for (i = 40; i <= 59; i++) { | |
temp = (rotate_left(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; | |
E = D; | |
D = C; | |
C = rotate_left(B, 30); | |
B = A; | |
A = temp; | |
} | |
for (i = 60; i <= 79; i++) { | |
temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; | |
E = D; | |
D = C; | |
C = rotate_left(B, 30); | |
B = A; | |
A = temp; | |
} | |
H0 = (H0 + A) & 0x0ffffffff; | |
H1 = (H1 + B) & 0x0ffffffff; | |
H2 = (H2 + C) & 0x0ffffffff; | |
H3 = (H3 + D) & 0x0ffffffff; | |
H4 = (H4 + E) & 0x0ffffffff; | |
} | |
var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); | |
return temp.toLowerCase(); | |
} | |
//I'm lazy, this is helpful | |
String.prototype.clearAfter = function (text) { | |
var indexOf = this.indexOf(text); | |
return (indexOf > 0) ? this.substr(0, indexOf) : this.toString(); | |
} | |
String.prototype.clearBefore = function (text) { | |
var indexOf = this.indexOf(text); | |
return (indexOf > 0) ? this.substr(indexOf + 1) : this.toString(); | |
} | |
String.prototype.leafName = function (text) { | |
var fname = this.clearAfter('?'); | |
return fname.substring(1 + fname.lastIndexOf('/')); | |
} | |
//" | |
String.prototype.regexIndexOf = function (regex, startpos) { | |
var indexOf = this.substring(startpos || 0).search(regex); | |
return (indexOf >= 0) ? (indexOf + (startpos || 0)) : indexOf; | |
} | |
//" | |
String.prototype.escapeRegExp = function () { | |
return this.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&").replace(" ", "\\s"); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
exports.ext = { | |
"application/andrew-inset":"ez", | |
"application/applixware":"aw", | |
"application/atom+xml":"atom", | |
"application/atomcat+xml":"atomcat", | |
"application/atomsvc+xml":"atomsvc", | |
"application/ccxml+xml":"ccxml", | |
"application/cdmi-capability":"cdmia", | |
"application/cdmi-container":"cdmic", | |
"application/cdmi-domain":"cdmid", | |
"application/cdmi-object":"cdmio", | |
"application/cdmi-queue":"cdmiq", | |
"application/cu-seeme":"cu", | |
"application/davmount+xml":"davmount", | |
"application/docbook+xml":"dbk", | |
"application/dssc+der":"dssc", | |
"application/dssc+xml":"xdssc", | |
"application/ecmascript":"ecma", | |
"application/emma+xml":"emma", | |
"application/epub+zip":"epub", | |
"application/exi":"exi", | |
"application/font-tdpfr":"pfr", | |
"application/gml+xml":"gml", | |
"application/gpx+xml":"gpx", | |
"application/gxf":"gxf", | |
"application/hyperstudio":"stk", | |
"application/inkml+xml":"ink", | |
"application/ipfix":"ipfix", | |
"application/java-archive":"jar", | |
"application/java-serialized-object":"ser", | |
"application/java-vm":"class", | |
"application/javascript":"js", | |
"application/json":"json", | |
"application/jsonml+json":"jsonml", | |
"application/lost+xml":"lostxml", | |
"application/mac-binhex40":"hqx", | |
"application/mac-compactpro":"cpt", | |
"application/mads+xml":"mads", | |
"application/marc":"mrc", | |
"application/marcxml+xml":"mrcx", | |
"application/mathematica":"ma", | |
"application/mathml+xml":"mathml", | |
"application/mbox":"mbox", | |
"application/mediaservercontrol+xml":"mscml", | |
"application/metalink+xml":"metalink", | |
"application/metalink4+xml":"meta4", | |
"application/mets+xml":"mets", | |
"application/mods+xml":"mods", | |
"application/mp21":"m21", | |
"application/mp4":"mp4s", | |
"application/msword":"doc", | |
"application/mxf":"mxf", | |
"application/octet-stream":"bin", | |
"application/oda":"oda", | |
"application/oebps-package+xml":"opf", | |
"application/ogg":"ogx", | |
"application/omdoc+xml":"omdoc", | |
"application/onenote":"onetoc", | |
"application/oxps":"oxps", | |
"application/patch-ops-error+xml":"xer", | |
"application/pdf":"pdf", | |
"application/pgp-encrypted":"pgp", | |
"application/pgp-signature":"asc", | |
"application/pics-rules":"prf", | |
"application/pkcs10":"p10", | |
"application/pkcs7-mime":"p7m", | |
"application/pkcs7-signature":"p7s", | |
"application/pkcs8":"p8", | |
"application/pkix-attr-cert":"ac", | |
"application/pkix-cert":"cer", | |
"application/pkix-crl":"crl", | |
"application/pkix-pkipath":"pkipath", | |
"application/pkixcmp":"pki", | |
"application/pls+xml":"pls", | |
"application/postscript":"ai", | |
"application/prs.cww":"cww", | |
"application/pskc+xml":"pskcxml", | |
"application/rdf+xml":"rdf", | |
"application/reginfo+xml":"rif", | |
"application/relax-ng-compact-syntax":"rnc", | |
"application/resource-lists+xml":"rl", | |
"application/resource-lists-diff+xml":"rld", | |
"application/rls-services+xml":"rs", | |
"application/rpki-ghostbusters":"gbr", | |
"application/rpki-manifest":"mft", | |
"application/rpki-roa":"roa", | |
"application/rsd+xml":"rsd", | |
"application/rss+xml":"rss", | |
"application/rtf":"rtf", | |
"application/sbml+xml":"sbml", | |
"application/scvp-cv-request":"scq", | |
"application/scvp-cv-response":"scs", | |
"application/scvp-vp-request":"spq", | |
"application/scvp-vp-response":"spp", | |
"application/sdp":"sdp", | |
"application/set-payment-initiation":"setpay", | |
"application/set-registration-initiation":"setreg", | |
"application/shf+xml":"shf", | |
"application/smil+xml":"smi", | |
"application/sparql-query":"rq", | |
"application/sparql-results+xml":"srx", | |
"application/srgs":"gram", | |
"application/srgs+xml":"grxml", | |
"application/sru+xml":"sru", | |
"application/ssdl+xml":"ssdl", | |
"application/ssml+xml":"ssml", | |
"application/tei+xml":"tei", | |
"application/thraud+xml":"tfi", | |
"application/timestamped-data":"tsd", | |
"application/vnd.3gpp.pic-bw-large":"plb", | |
"application/vnd.3gpp.pic-bw-small":"psb", | |
"application/vnd.3gpp.pic-bw-var":"pvb", | |
"application/vnd.3gpp2.tcap":"tcap", | |
"application/vnd.3m.post-it-notes":"pwn", | |
"application/vnd.accpac.simply.aso":"aso", | |
"application/vnd.accpac.simply.imp":"imp", | |
"application/vnd.acucobol":"acu", | |
"application/vnd.acucorp":"atc", | |
"application/vnd.adobe.air-application-installer-package+zip":"air", | |
"application/vnd.adobe.formscentral.fcdt":"fcdt", | |
"application/vnd.adobe.fxp":"fxp", | |
"application/vnd.adobe.xdp+xml":"xdp", | |
"application/vnd.adobe.xfdf":"xfdf", | |
"application/vnd.ahead.space":"ahead", | |
"application/vnd.airzip.filesecure.azf":"azf", | |
"application/vnd.airzip.filesecure.azs":"azs", | |
"application/vnd.amazon.ebook":"azw", | |
"application/vnd.americandynamics.acc":"acc", | |
"application/vnd.amiga.ami":"ami", | |
"application/vnd.android.package-archive":"apk", | |
"application/vnd.anser-web-certificate-issue-initiation":"cii", | |
"application/vnd.anser-web-funds-transfer-initiation":"fti", | |
"application/vnd.antix.game-component":"atx", | |
"application/vnd.apple.installer+xml":"mpkg", | |
"application/vnd.apple.mpegurl":"m3u8", | |
"application/vnd.aristanetworks.swi":"swi", | |
"application/vnd.astraea-software.iota":"iota", | |
"application/vnd.audiograph":"aep", | |
"application/vnd.blueice.multipass":"mpm", | |
"application/vnd.bmi":"bmi", | |
"application/vnd.businessobjects":"rep", | |
"application/vnd.chemdraw+xml":"cdxml", | |
"application/vnd.chipnuts.karaoke-mmd":"mmd", | |
"application/vnd.cinderella":"cdy", | |
"application/vnd.claymore":"cla", | |
"application/vnd.cloanto.rp9":"rp9", | |
"application/vnd.clonk.c4group":"c4g", | |
"application/vnd.cluetrust.cartomobile-config":"c11amc", | |
"application/vnd.cluetrust.cartomobile-config-pkg":"c11amz", | |
"application/vnd.commonspace":"csp", | |
"application/vnd.contact.cmsg":"cdbcmsg", | |
"application/vnd.cosmocaller":"cmc", | |
"application/vnd.crick.clicker":"clkx", | |
"application/vnd.crick.clicker.keyboard":"clkk", | |
"application/vnd.crick.clicker.palette":"clkp", | |
"application/vnd.crick.clicker.template":"clkt", | |
"application/vnd.crick.clicker.wordbank":"clkw", | |
"application/vnd.criticaltools.wbs+xml":"wbs", | |
"application/vnd.ctc-posml":"pml", | |
"application/vnd.cups-ppd":"ppd", | |
"application/vnd.curl.car":"car", | |
"application/vnd.curl.pcurl":"pcurl", | |
"application/vnd.dart":"dart", | |
"application/vnd.data-vision.rdz":"rdz", | |
"application/vnd.dece.data":"uvf", | |
"application/vnd.dece.ttml+xml":"uvt", | |
"application/vnd.dece.unspecified":"uvx", | |
"application/vnd.dece.zip":"uvz", | |
"application/vnd.denovo.fcselayout-link":"fe", | |
"application/vnd.dna":"dna", | |
"application/vnd.dolby.mlp":"mlp", | |
"application/vnd.dpgraph":"dpg", | |
"application/vnd.dreamfactory":"dfac", | |
"application/vnd.ds-keypoint":"kpxx", | |
"application/vnd.dvb.ait":"ait", | |
"application/vnd.dvb.service":"svc", | |
"application/vnd.dynageo":"geo", | |
"application/vnd.ecowin.chart":"mag", | |
"application/vnd.enliven":"nml", | |
"application/vnd.epson.esf":"esf", | |
"application/vnd.epson.msf":"msf", | |
"application/vnd.epson.quickanime":"qam", | |
"application/vnd.epson.salt":"slt", | |
"application/vnd.epson.ssf":"ssf", | |
"application/vnd.eszigno3+xml":"es3", | |
"application/vnd.ezpix-album":"ez2", | |
"application/vnd.ezpix-package":"ez3", | |
"application/vnd.fdf":"fdf", | |
"application/vnd.fdsn.mseed":"mseed", | |
"application/vnd.fdsn.seed":"seed", | |
"application/vnd.flographit":"gph", | |
"application/vnd.fluxtime.clip":"ftc", | |
"application/vnd.framemaker":"fm", | |
"application/vnd.frogans.fnc":"fnc", | |
"application/vnd.frogans.ltf":"ltf", | |
"application/vnd.fsc.weblaunch":"fsc", | |
"application/vnd.fujitsu.oasys":"oas", | |
"application/vnd.fujitsu.oasys2":"oa2", | |
"application/vnd.fujitsu.oasys3":"oa3", | |
"application/vnd.fujitsu.oasysgp":"fg5", | |
"application/vnd.fujitsu.oasysprs":"bh2", | |
"application/vnd.fujixerox.ddd":"ddd", | |
"application/vnd.fujixerox.docuworks":"xdw", | |
"application/vnd.fujixerox.docuworks.binder":"xbd", | |
"application/vnd.fuzzysheet":"fzs", | |
"application/vnd.genomatix.tuxedo":"txd", | |
"application/vnd.geogebra.file":"ggb", | |
"application/vnd.geogebra.tool":"ggt", | |
"application/vnd.geometry-explorer":"gex", | |
"application/vnd.geonext":"gxt", | |
"application/vnd.geoplan":"g2w", | |
"application/vnd.geospace":"g3w", | |
"application/vnd.gmx":"gmx", | |
"application/vnd.google-earth.kml+xml":"kml", | |
"application/vnd.google-earth.kmz":"kmz", | |
"application/vnd.grafeq":"gqf", | |
"application/vnd.groove-account":"gac", | |
"application/vnd.groove-help":"ghf", | |
"application/vnd.groove-identity-message":"gim", | |
"application/vnd.groove-injector":"grv", | |
"application/vnd.groove-tool-message":"gtm", | |
"application/vnd.groove-tool-template":"tpl", | |
"application/vnd.groove-vcard":"vcg", | |
"application/vnd.hal+xml":"hal", | |
"application/vnd.handheld-entertainment+xml":"zmm", | |
"application/vnd.hbci":"hbci", | |
"application/vnd.hhe.lesson-player":"les", | |
"application/vnd.hp-hpgl":"hpgl", | |
"application/vnd.hp-hpid":"hpid", | |
"application/vnd.hp-hps":"hps", | |
"application/vnd.hp-jlyt":"jlt", | |
"application/vnd.hp-pcl":"pcl", | |
"application/vnd.hp-pclxl":"pclxl", | |
"application/vnd.hydrostatix.sof-data":"sfd", | |
"application/vnd.ibm.minipay":"mpy", | |
"application/vnd.ibm.modcap":"afp", | |
"application/vnd.ibm.rights-management":"irm", | |
"application/vnd.ibm.secure-container":"sc", | |
"application/vnd.iccprofile":"icc", | |
"application/vnd.igloader":"igl", | |
"application/vnd.immervision-ivp":"ivp", | |
"application/vnd.immervision-ivu":"ivu", | |
"application/vnd.insors.igm":"igm", | |
"application/vnd.intercon.formnet":"xpw", | |
"application/vnd.intergeo":"i2g", | |
"application/vnd.intu.qbo":"qbo", | |
"application/vnd.intu.qfx":"qfx", | |
"application/vnd.ipunplugged.rcprofile":"rcprofile", | |
"application/vnd.irepository.package+xml":"irp", | |
"application/vnd.is-xpr":"xpr", | |
"application/vnd.isac.fcs":"fcs", | |
"application/vnd.jam":"jam", | |
"application/vnd.jcp.javame.midlet-rms":"rms", | |
"application/vnd.jisp":"jisp", | |
"application/vnd.joost.joda-archive":"joda", | |
"application/vnd.kahootz":"ktz", | |
"application/vnd.kde.karbon":"karbon", | |
"application/vnd.kde.kchart":"chrt", | |
"application/vnd.kde.kformula":"kfo", | |
"application/vnd.kde.kivio":"flw", | |
"application/vnd.kde.kontour":"kon", | |
"application/vnd.kde.kpresenter":"kpr", | |
"application/vnd.kde.kspread":"ksp", | |
"application/vnd.kde.kword":"kwd", | |
"application/vnd.kenameaapp":"htke", | |
"application/vnd.kidspiration":"kia", | |
"application/vnd.kinar":"kne", | |
"application/vnd.koan":"skp", | |
"application/vnd.kodak-descriptor":"sse", | |
"application/vnd.las.las+xml":"lasxml", | |
"application/vnd.llamagraphics.life-balance.desktop":"lbd", | |
"application/vnd.llamagraphics.life-balance.exchange+xml":"lbe", | |
"application/vnd.lotus-1-2-3":"123", | |
"application/vnd.lotus-approach":"apr", | |
"application/vnd.lotus-freelance":"pre", | |
"application/vnd.lotus-notes":"nsf", | |
"application/vnd.lotus-organizer":"org", | |
"application/vnd.lotus-screencam":"scm", | |
"application/vnd.lotus-wordpro":"lwp", | |
"application/vnd.macports.portpkg":"portpkg", | |
"application/vnd.mcd":"mcd", | |
"application/vnd.medcalcdata":"mc1", | |
"application/vnd.mediastation.cdkey":"cdkey", | |
"application/vnd.mfer":"mwf", | |
"application/vnd.mfmp":"mfm", | |
"application/vnd.micrografx.flo":"flo", | |
"application/vnd.micrografx.igx":"igx", | |
"application/vnd.mif":"mif", | |
"application/vnd.mobius.daf":"daf", | |
"application/vnd.mobius.dis":"dis", | |
"application/vnd.mobius.mbk":"mbk", | |
"application/vnd.mobius.mqy":"mqy", | |
"application/vnd.mobius.msl":"msl", | |
"application/vnd.mobius.plc":"plc", | |
"application/vnd.mobius.txf":"txf", | |
"application/vnd.mophun.application":"mpn", | |
"application/vnd.mophun.certificate":"mpc", | |
"application/vnd.mozilla.xul+xml":"xul", | |
"application/vnd.ms-artgalry":"cil", | |
"application/vnd.ms-cab-compressed":"cab", | |
"application/vnd.ms-excel":"xls", | |
"application/vnd.ms-excel.addin.macroenabled.12":"xlam", | |
"application/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb", | |
"application/vnd.ms-excel.sheet.macroenabled.12":"xlsm", | |
"application/vnd.ms-excel.template.macroenabled.12":"xltm", | |
"application/vnd.ms-fontobject":"eot", | |
"application/vnd.ms-htmlhelp":"chm", | |
"application/vnd.ms-ims":"ims", | |
"application/vnd.ms-lrm":"lrm", | |
"application/vnd.ms-officetheme":"thmx", | |
"application/vnd.ms-pki.seccat":"cat", | |
"application/vnd.ms-pki.stl":"stl", | |
"application/vnd.ms-powerpoint":"ppt", | |
"application/vnd.ms-powerpoint.addin.macroenabled.12":"ppam", | |
"application/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm", | |
"application/vnd.ms-powerpoint.slide.macroenabled.12":"sldm", | |
"application/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm", | |
"application/vnd.ms-powerpoint.template.macroenabled.12":"potm", | |
"application/vnd.ms-project":"mpp", | |
"application/vnd.ms-word.document.macroenabled.12":"docm", | |
"application/vnd.ms-word.template.macroenabled.12":"dotm", | |
"application/vnd.ms-works":"wps", | |
"application/vnd.ms-wpl":"wpl", | |
"application/vnd.ms-xpsdocument":"xps", | |
"application/vnd.mseq":"mseq", | |
"application/vnd.musician":"mus", | |
"application/vnd.muvee.style":"msty", | |
"application/vnd.mynfc":"taglet", | |
"application/vnd.neurolanguage.nlu":"nlu", | |
"application/vnd.nitf":"ntf", | |
"application/vnd.noblenet-directory":"nnd", | |
"application/vnd.noblenet-sealer":"nns", | |
"application/vnd.noblenet-web":"nnw", | |
"application/vnd.nokia.n-gage.data":"ngdat", | |
"application/vnd.nokia.n-gage.symbian.install":"n", | |
"application/vnd.nokia.radio-preset":"rpst", | |
"application/vnd.nokia.radio-presets":"rpss", | |
"application/vnd.novadigm.edm":"edm", | |
"application/vnd.novadigm.edx":"edx", | |
"application/vnd.novadigm.ext":"ext", | |
"application/vnd.oasis.opendocument.chart":"odc", | |
"application/vnd.oasis.opendocument.chart-template":"otc", | |
"application/vnd.oasis.opendocument.database":"odb", | |
"application/vnd.oasis.opendocument.formula":"odf", | |
"application/vnd.oasis.opendocument.formula-template":"odft", | |
"application/vnd.oasis.opendocument.graphics":"odg", | |
"application/vnd.oasis.opendocument.graphics-template":"otg", | |
"application/vnd.oasis.opendocument.image":"odi", | |
"application/vnd.oasis.opendocument.image-template":"oti", | |
"application/vnd.oasis.opendocument.presentation":"odp", | |
"application/vnd.oasis.opendocument.presentation-template":"otp", | |
"application/vnd.oasis.opendocument.spreadsheet":"ods", | |
"application/vnd.oasis.opendocument.spreadsheet-template":"ots", | |
"application/vnd.oasis.opendocument.text":"odt", | |
"application/vnd.oasis.opendocument.text-master":"odm", | |
"application/vnd.oasis.opendocument.text-template":"ott", | |
"application/vnd.oasis.opendocument.text-web":"oth", | |
"application/vnd.olpc-sugar":"xo", | |
"application/vnd.oma.dd2+xml":"dd2", | |
"application/vnd.openofficeorg.extension":"oxt", | |
"application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx", | |
"application/vnd.openxmlformats-officedocument.presentationml.slide":"sldx", | |
"application/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx", | |
"application/vnd.openxmlformats-officedocument.presentationml.template":"potx", | |
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx", | |
"application/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx", | |
"application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx", | |
"application/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx", | |
"application/vnd.osgeo.mapguide.package":"mgp", | |
"application/vnd.osgi.dp":"dp", | |
"application/vnd.osgi.subsystem":"esa", | |
"application/vnd.palm":"pdb", | |
"application/vnd.pawaafile":"paw", | |
"application/vnd.pg.format":"str", | |
"application/vnd.pg.osasli":"ei6", | |
"application/vnd.picsel":"efif", | |
"application/vnd.pmi.widget":"wg", | |
"application/vnd.pocketlearn":"plf", | |
"application/vnd.powerbuilder6":"pbd", | |
"application/vnd.previewsystems.box":"box", | |
"application/vnd.proteus.magazine":"mgz", | |
"application/vnd.publishare-delta-tree":"qps", | |
"application/vnd.pvi.ptid1":"ptid", | |
"application/vnd.quark.quarkxpress":"qxd", | |
"application/vnd.realvnc.bed":"bed", | |
"application/vnd.recordare.musicxml":"mxl", | |
"application/vnd.recordare.musicxml+xml":"musicxml", | |
"application/vnd.rig.cryptonote":"cryptonote", | |
"application/vnd.rim.cod":"cod", | |
"application/vnd.rn-realmedia":"rm", | |
"application/vnd.rn-realmedia-vbr":"rmvb", | |
"application/vnd.route66.link66+xml":"link66", | |
"application/vnd.sailingtracker.track":"st", | |
"application/vnd.seemail":"see", | |
"application/vnd.sema":"sema", | |
"application/vnd.semd":"semd", | |
"application/vnd.semf":"semf", | |
"application/vnd.shana.informed.formdata":"ifm", | |
"application/vnd.shana.informed.formtemplate":"itp", | |
"application/vnd.shana.informed.interchange":"iif", | |
"application/vnd.shana.informed.package":"ipk", | |
"application/vnd.simtech-mindmapper":"twd", | |
"application/vnd.smaf":"mmf", | |
"application/vnd.smart.teacher":"teacher", | |
"application/vnd.solent.sdkm+xml":"sdkm", | |
"application/vnd.spotfire.dxp":"dxp", | |
"application/vnd.spotfire.sfs":"sfs", | |
"application/vnd.stardivision.calc":"sdc", | |
"application/vnd.stardivision.draw":"sda", | |
"application/vnd.stardivision.impress":"sdd", | |
"application/vnd.stardivision.math":"smf", | |
"application/vnd.stardivision.writer":"sdw", | |
"application/vnd.stardivision.writer-global":"sgl", | |
"application/vnd.stepmania.package":"smzip", | |
"application/vnd.stepmania.stepchart":"sm", | |
"application/vnd.sun.xml.calc":"sxc", | |
"application/vnd.sun.xml.calc.template":"stc", | |
"application/vnd.sun.xml.draw":"sxd", | |
"application/vnd.sun.xml.draw.template":"std", | |
"application/vnd.sun.xml.impress":"sxi", | |
"application/vnd.sun.xml.impress.template":"sti", | |
"application/vnd.sun.xml.math":"sxm", | |
"application/vnd.sun.xml.writer":"sxw", | |
"application/vnd.sun.xml.writer.global":"sxg", | |
"application/vnd.sun.xml.writer.template":"stw", | |
"application/vnd.sus-calendar":"sus", | |
"application/vnd.svd":"svd", | |
"application/vnd.symbian.install":"sis", | |
"application/vnd.syncml+xml":"xsm", | |
"application/vnd.syncml.dm+wbxml":"bdm", | |
"application/vnd.syncml.dm+xml":"xdm", | |
"application/vnd.tao.intent-module-archive":"tao", | |
"application/vnd.tcpdump.pcap":"pcap", | |
"application/vnd.tmobile-livetv":"tmo", | |
"application/vnd.trid.tpt":"tpt", | |
"application/vnd.triscape.mxs":"mxs", | |
"application/vnd.trueapp":"tra", | |
"application/vnd.ufdl":"ufd", | |
"application/vnd.uiq.theme":"utz", | |
"application/vnd.umajin":"umj", | |
"application/vnd.unity":"unityweb", | |
"application/vnd.uoml+xml":"uoml", | |
"application/vnd.vcx":"vcx", | |
"application/vnd.visio":"vsd", | |
"application/vnd.visionary":"vis", | |
"application/vnd.vsf":"vsf", | |
"application/vnd.wap.wbxml":"wbxml", | |
"application/vnd.wap.wmlc":"wmlc", | |
"application/vnd.wap.wmlscriptc":"wmlsc", | |
"application/vnd.webturbo":"wtb", | |
"application/vnd.wolfram.player":"nbp", | |
"application/vnd.wordperfect":"wpd", | |
"application/vnd.wqd":"wqd", | |
"application/vnd.wt.stf":"stf", | |
"application/vnd.xara":"xar", | |
"application/vnd.xfdl":"xfdl", | |
"application/vnd.yamaha.hv-dic":"hvd", | |
"application/vnd.yamaha.hv-script":"hvs", | |
"application/vnd.yamaha.hv-voice":"hvp", | |
"application/vnd.yamaha.openscoreformat":"osf", | |
"application/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg", | |
"application/vnd.yamaha.smaf-audio":"saf", | |
"application/vnd.yamaha.smaf-phrase":"spf", | |
"application/vnd.yellowriver-custom-menu":"cmp", | |
"application/vnd.zul":"zir", | |
"application/vnd.zzazz.deck+xml":"zaz", | |
"application/voicexml+xml":"vxml", | |
"application/widget":"wgt", | |
"application/winhlp":"hlp", | |
"application/wsdl+xml":"wsdl", | |
"application/wspolicy+xml":"wspolicy", | |
"application/x-7z-compressed":"7z", | |
"application/x-abiword":"abw", | |
"application/x-ace-compressed":"ace", | |
"application/x-apple-diskimage":"dmg", | |
"application/x-authorware-bin":"aab", | |
"application/x-authorware-map":"aam", | |
"application/x-authorware-seg":"aas", | |
"application/x-bcpio":"bcpio", | |
"application/x-bittorrent":"torrent", | |
"application/x-blorb":"blb", | |
"application/x-bzip":"bz", | |
"application/x-bzip2":"bz2", | |
"application/x-cbr":"cbr", | |
"application/x-cdlink":"vcd", | |
"application/x-cfs-compressed":"cfs", | |
"application/x-chat":"chat", | |
"application/x-chess-pgn":"pgn", | |
"application/x-conference":"nsc", | |
"application/x-cpio":"cpio", | |
"application/x-csh":"csh", | |
"application/x-debian-package":"deb", | |
"application/x-dgc-compressed":"dgc", | |
"application/x-director":"dir", | |
"application/x-doom":"wad", | |
"application/x-dtbncx+xml":"ncx", | |
"application/x-dtbook+xml":"dtb", | |
"application/x-dtbresource+xml":"res", | |
"application/x-dvi":"dvi", | |
"application/x-envoy":"evy", | |
"application/x-eva":"eva", | |
"application/x-font-bdf":"bdf", | |
"application/x-font-ghostscript":"gsf", | |
"application/x-font-linux-psf":"psf", | |
"application/x-font-otf":"otf", | |
"application/x-font-pcf":"pcf", | |
"application/x-font-snf":"snf", | |
"application/x-font-ttf":"ttf", | |
"application/x-font-type1":"pfa", | |
"application/x-font-woff":"woff", | |
"application/x-freearc":"arc", | |
"application/x-futuresplash":"spl", | |
"application/x-gca-compressed":"gca", | |
"application/x-glulx":"ulx", | |
"application/x-gnumeric":"gnumeric", | |
"application/x-gramps-xml":"gramps", | |
"application/x-gtar":"gtar", | |
"application/x-hdf":"hdf", | |
"application/x-install-instructions":"install", | |
"application/x-iso9660-image":"iso", | |
"application/x-java-jnlp-file":"jnlp", | |
"application/x-latex":"latex", | |
"application/x-lzh-compressed":"lzh", | |
"application/x-mie":"mie", | |
"application/x-mobipocket-ebook":"prc", | |
"application/x-ms-application":"application", | |
"application/x-ms-shortcut":"lnk", | |
"application/x-ms-wmd":"wmd", | |
"application/x-ms-wmz":"wmz", | |
"application/x-ms-xbap":"xbap", | |
"application/x-msaccess":"mdb", | |
"application/x-msbinder":"obd", | |
"application/x-mscardfile":"crd", | |
"application/x-msclip":"clp", | |
"application/x-msdownload":"exe", | |
"application/x-msmediaview":"mvb", | |
"application/x-msmetafile":"wmf", | |
"application/x-msmoney":"mny", | |
"application/x-mspublisher":"pub", | |
"application/x-msschedule":"scd", | |
"application/x-msterminal":"trm", | |
"application/x-mswrite":"wri", | |
"application/x-netcdf":"nc", | |
"application/x-nzb":"nzb", | |
"application/x-pkcs12":"p12", | |
"application/x-pkcs7-certificates":"p7b", | |
"application/x-pkcs7-certreqresp":"p7r", | |
"application/x-rar-compressed":"rar", | |
"application/x-research-info-systems":"ris", | |
"application/x-sh":"sh", | |
"application/x-shar":"shar", | |
"application/x-shockwave-flash":"swf", | |
"application/x-silverlight-app":"xap", | |
"application/x-sql":"sql", | |
"application/x-stuffit":"sit", | |
"application/x-stuffitx":"sitx", | |
"application/x-subrip":"srt", | |
"application/x-sv4cpio":"sv4cpio", | |
"application/x-sv4crc":"sv4crc", | |
"application/x-t3vm-image":"t3", | |
"application/x-tads":"gam", | |
"application/x-tar":"tar", | |
"application/x-tcl":"tcl", | |
"application/x-tex":"tex", | |
"application/x-tex-tfm":"tfm", | |
"application/x-texinfo":"texinfo", | |
"application/x-tgif":"obj", | |
"application/x-ustar":"ustar", | |
"application/x-wais-source":"src", | |
"application/x-x509-ca-cert":"der", | |
"application/x-xfig":"fig", | |
"application/x-xliff+xml":"xlf", | |
"application/x-xpinstall":"xpi", | |
"application/x-xz":"xz", | |
"application/x-zmachine":"z1", | |
"application/xaml+xml":"xaml", | |
"application/xcap-diff+xml":"xdf", | |
"application/xenc+xml":"xenc", | |
"application/xhtml+xml":"xhtml", | |
"application/xml":"xml", | |
"application/xml-dtd":"dtd", | |
"application/xop+xml":"xop", | |
"application/xproc+xml":"xpl", | |
"application/xslt+xml":"xslt", | |
"application/xspf+xml":"xspf", | |
"application/xv+xml":"mxml", | |
"application/yang":"yang", | |
"application/yin+xml":"yin", | |
"application/zip":"zip", | |
"audio/adpcm":"adp", | |
"audio/basic":"au", | |
"audio/midi":"mid", | |
"audio/mp4":"mp4a", | |
"audio/mpeg":"mpga", | |
"audio/ogg":"oga", | |
"audio/s3m":"s3m", | |
"audio/silk":"sil", | |
"audio/vnd.dece.audio":"uva", | |
"audio/vnd.digital-winds":"eol", | |
"audio/vnd.dra":"dra", | |
"audio/vnd.dts":"dts", | |
"audio/vnd.dts.hd":"dtshd", | |
"audio/vnd.lucent.voice":"lvp", | |
"audio/vnd.ms-playready.media.pya":"pya", | |
"audio/vnd.nuera.ecelp4800":"ecelp4800", | |
"audio/vnd.nuera.ecelp7470":"ecelp7470", | |
"audio/vnd.nuera.ecelp9600":"ecelp9600", | |
"audio/vnd.rip":"rip", | |
"audio/webm":"weba", | |
"audio/x-aac":"aac", | |
"audio/x-aiff":"aif", | |
"audio/x-caf":"caf", | |
"audio/x-flac":"flac", | |
"audio/x-matroska":"mka", | |
"audio/x-mpegurl":"m3u", | |
"audio/x-ms-wax":"wax", | |
"audio/x-ms-wma":"wma", | |
"audio/x-pn-realaudio":"ram", | |
"audio/x-pn-realaudio-plugin":"rmp", | |
"audio/x-wav":"wav", | |
"audio/xm":"xm", | |
"chemical/x-cdx":"cdx", | |
"chemical/x-cif":"cif", | |
"chemical/x-cmdf":"cmdf", | |
"chemical/x-cml":"cml", | |
"chemical/x-csml":"csml", | |
"chemical/x-xyz":"xyz", | |
"image/bmp":"bmp", | |
"image/cgm":"cgm", | |
"image/g3fax":"g3", | |
"image/gif":"gif", | |
"image/ief":"ief", | |
"image/jpeg":"jpeg", | |
"image/ktx":"ktx", | |
"image/png":"png", | |
"image/prs.btif":"btif", | |
"image/sgi":"sgi", | |
"image/svg+xml":"svg", | |
"image/tiff":"tiff", | |
"image/vnd.adobe.photoshop":"psd", | |
"image/vnd.dece.graphic":"uvi", | |
"image/vnd.dvb.subtitle":"sub", | |
"image/vnd.djvu":"djvu", | |
"image/vnd.dwg":"dwg", | |
"image/vnd.dxf":"dxf", | |
"image/vnd.fastbidsheet":"fbs", | |
"image/vnd.fpx":"fpx", | |
"image/vnd.fst":"fst", | |
"image/vnd.fujixerox.edmics-mmr":"mmr", | |
"image/vnd.fujixerox.edmics-rlc":"rlc", | |
"image/vnd.ms-modi":"mdi", | |
"image/vnd.ms-photo":"wdp", | |
"image/vnd.net-fpx":"npx", | |
"image/vnd.wap.wbmp":"wbmp", | |
"image/vnd.xiff":"xif", | |
"image/webp":"webp", | |
"image/x-3ds":"3ds", | |
"image/x-cmu-raster":"ras", | |
"image/x-cmx":"cmx", | |
"image/x-freehand":"fh", | |
"image/x-icon":"ico", | |
"image/x-mrsid-image":"sid", | |
"image/x-pcx":"pcx", | |
"image/x-pict":"pic", | |
"image/x-portable-anymap":"pnm", | |
"image/x-portable-bitmap":"pbm", | |
"image/x-portable-graymap":"pgm", | |
"image/x-portable-pixmap":"ppm", | |
"image/x-rgb":"rgb", | |
"image/x-tga":"tga", | |
"image/x-xbitmap":"xbm", | |
"image/x-xpixmap":"xpm", | |
"image/x-xwindowdump":"xwd", | |
"message/rfc822":"eml", | |
"model/iges":"igs", | |
"model/mesh":"msh", | |
"model/vnd.collada+xml":"dae", | |
"model/vnd.dwf":"dwf", | |
"model/vnd.gdl":"gdl", | |
"model/vnd.gtw":"gtw", | |
"model/vnd.mts":"mts", | |
"model/vnd.vtu":"vtu", | |
"model/vrml":"wrl", | |
"model/x3d+binary":"x3db", | |
"model/x3d+vrml":"x3dv", | |
"model/x3d+xml":"x3d", | |
"text/cache-manifest":"appcache", | |
"text/calendar":"ics", | |
"text/css":"css", | |
"text/csv":"csv", | |
"text/javascript":"js", | |
"text/html":"html", | |
"text/n3":"n3", | |
"text/plain":"txt", | |
"text/prs.lines.tag":"dsc", | |
"text/richtext":"rtx", | |
"text/sgml":"sgml", | |
"text/tab-separated-values":"tsv", | |
"text/troff":"t", | |
"text/turtle":"ttl", | |
"text/uri-list":"uri", | |
"text/vcard":"vcard", | |
"text/vnd.curl":"curl", | |
"text/vnd.curl.dcurl":"dcurl", | |
"text/vnd.curl.scurl":"scurl", | |
"text/vnd.curl.mcurl":"mcurl", | |
"text/vnd.dvb.subtitle":"sub", | |
"text/vnd.fly":"fly", | |
"text/vnd.fmi.flexstor":"flx", | |
"text/vnd.graphviz":"gv", | |
"text/vnd.in3d.3dml":"3dml", | |
"text/vnd.in3d.spot":"spot", | |
"text/vnd.sun.j2me.app-descriptor":"jad", | |
"text/vnd.wap.wml":"wml", | |
"text/vnd.wap.wmlscript":"wmls", | |
"text/x-asm":"s", | |
"text/x-c":"c", | |
"text/x-fortran":"f", | |
"text/x-java-source":"java", | |
"text/x-opml":"opml", | |
"text/x-pascal":"p", | |
"text/x-nfo":"nfo", | |
"text/x-setext":"etx", | |
"text/x-sfv":"sfv", | |
"text/x-uuencode":"uu", | |
"text/x-vcalendar":"vcs", | |
"text/x-vcard":"vcf", | |
"video/3gpp":"3gp", | |
"video/3gpp2":"3g2", | |
"video/h261":"h261", | |
"video/h263":"h263", | |
"video/h264":"h264", | |
"video/jpeg":"jpgv", | |
"video/jpm":"jpm", | |
"video/mj2":"mj2", | |
"video/mp4":"mp4", | |
"video/mpeg":"mpeg", | |
"video/ogg":"ogv", | |
"video/quicktime":"qt", | |
"video/vnd.dece.hd":"uvh", | |
"video/vnd.dece.mobile":"uvm", | |
"video/vnd.dece.pd":"uvp", | |
"video/vnd.dece.sd":"uvs", | |
"video/vnd.dece.video":"uvv", | |
"video/vnd.dvb.file":"dvb", | |
"video/vnd.fvt":"fvt", | |
"video/vnd.mpegurl":"mxu", | |
"video/vnd.ms-playready.media.pyv":"pyv", | |
"video/vnd.uvvu.mp4":"uvu", | |
"video/vnd.vivo":"viv", | |
"video/webm":"webm", | |
"video/x-f4v":"f4v", | |
"video/x-fli":"fli", | |
"video/x-flv":"flv", | |
"video/x-m4v":"m4v", | |
"video/x-matroska":"mkv", | |
"video/x-mng":"mng", | |
"video/x-ms-asf":"asf", | |
"video/x-ms-vob":"vob", | |
"video/x-ms-wm":"wm", | |
"video/x-ms-wmv":"wmv", | |
"video/x-ms-wmx":"wmx", | |
"video/x-ms-wvx":"wvx", | |
"video/x-msvideo":"avi", | |
"video/x-sgi-movie":"movie", | |
"video/x-smv":"smv", | |
"x-conference/x-cooltalk":"ice" | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* object handling works better if you do it with onResourceReceived at the 'end' stage, rather than | |
* in onLoadFinished. For one thing you'll get AJAX-loaded objects. | |
* This snippet filters out pdf files. | |
*/ | |
page.onResourceReceived = function ( response ) { | |
if ( response.stage == 'end' && response.contentType.indexOf( 'application/pdf' ) >= 0 ) { | |
cache.includeResource( response ); | |
for ( index in cache.cachedResources ) { | |
/* index is the URL of the resource */ | |
var rsrc = cache.cachedResources[index]; | |
if ( !rsrc.saved ) { | |
var fname = rsrc.cacheFileNoPath; | |
var ext = mimetype.ext[rsrc.mimetype]; | |
var finalFile = cache.objectPath + '/' + rsrc.leafName; | |
phantomFs.write( finalFile, rsrc.getContents(), 'b' ); | |
rsrc.saved = true; | |
var asset = {}; | |
asset.leafName = rsrc.leafName; | |
asset.path = finalFile; | |
setState( 'download_' + downloadCount, asset ); | |
downloadCount++; | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//for this to work, you have to call phantomjs with the cache enabled: | |
//usage: phantomjs --disk-cache=true test.js | |
var page = require('webpage').create(); | |
var fs = require('fs'); | |
var cache = require('./cache'); | |
var mimetype = require('./mimetype'); | |
//this is the path that QTNetwork classes uses for caching files for it's http client | |
//the path should be the one that has 16 folders labeled 0,1,2,3,...,F | |
cache.cachePath = '/Users/brandon/Library/Caches/Ofi Labs/PhantomJS/data7/'; | |
var url = 'http://google.com'; | |
page.viewportSize = { width: 1300, height: 768 }; | |
//when the resource is received, go ahead and include a reference to it in the cache object | |
page.onResourceReceived = function(response) { | |
//I only cache images, but you can change this | |
if(response.contentType.indexOf('image') >= 0) | |
{ | |
cache.includeResource(response); | |
} | |
}; | |
//when the page is done loading, go through each cachedResource and do something with it, | |
//I'm just saving them to a file | |
page.onLoadFinished = function(status) { | |
for(index in cache.cachedResources) { | |
var file = cache.cachedResources[index].cacheFileNoPath; | |
var ext = mimetype.ext[cache.cachedResources[index].mimetype]; | |
var finalFile = file.replace("."+cache.cacheExtension,"."+ext); | |
fs.write('saved/'+finalFile,cache.cachedResources[index].getContents(),'b'); | |
} | |
}; | |
page.open(url, function () { | |
page.render('saved/google.pdf'); | |
phantom.exit(); | |
}); |
Hi, This line is broken.
this.buf = pFs.read(filename, 'b');
I tried to fix but cannot. Any help?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Cache.js rdr.skip(8); => rdr.skip(12);
works for me