X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Pman.Download.js;h=2f16b24689413da76ec062818932f5ab201c7308;hp=c66998b78a02c5c63460dd569ee61fd215288861;hb=443623f47935eb52acd65a3ff0d84eab1fd5a98b;hpb=3eba744634a02cde7f3ec07e5cdf10b72f8d8bcc diff --git a/Pman.Download.js b/Pman.Download.js index c66998b7..2f16b246 100644 --- a/Pman.Download.js +++ b/Pman.Download.js @@ -38,6 +38,8 @@ var t = new Pman.Download({ Pman.Download = function(cfg) { + + this.params = {}; Roo.apply(this, cfg); @@ -50,22 +52,20 @@ Pman.Download = function(cfg) if (this.newWindow && this.method == 'GET') { - Roo.log('in'); - Roo.log(cfg); - // as ie seems buggy... - window.open( cfg.url + '?' + Roo.urlEncode(cfg.params || {}), '_blank'); + // as ie seems buggy... + window.open( this.url + '?' + Roo.urlEncode(this.params || {}), '_blank'); return ; } - this.submit = false; - this.createCsvFrame(); + //this.submit = false; + //this.createCsvFrame(); - var requested = 0; + //var requested = 0; - Roo.EventManager.on( this.csvFrame, 'load', this.onLoad, this); + //Roo.EventManager.on( this.csvFrame, 'load', this.onLoad, this); //--- simple method.. @@ -73,6 +73,10 @@ Pman.Download = function(cfg) if (this.method == 'GET' && !this.params) { (function() { + + + this.createCsvFrame(); + //Roo.EventManager.on( this.csvFrame, 'load', this.onLoad, this); this.submit = true; this.csvFrame.src = cfg.url; //this.cleanup.defer(cfg.timeout || 30000,this); @@ -85,6 +89,8 @@ Pman.Download = function(cfg) Roo.log("creating form?"); + this.form = new FormData(); + /* var b = Roo.get(document.body); this.form = b.createChild({ tag: 'form', @@ -93,6 +99,7 @@ Pman.Download = function(cfg) target : this.newWindow ? '_new' : this.csvFrame.id, enctype : 'multipart/form-data' }); + **/ // // if(this.doctype == 'pdf'){ // this.pdfEmbed = b.createChild({ @@ -103,9 +110,11 @@ Pman.Download = function(cfg) // }); // } - + //Roo.log(this.params); + this.params._get = 1; // always do a post request, with _get passed for(var i in this.params) { - + this.form.append(i, this.params[i]); + /* var el = this.form.createChild( { ns : 'html', tag : 'input', @@ -114,16 +123,55 @@ Pman.Download = function(cfg) name : i, value : this.params[i] }); + */ } + var req = new XMLHttpRequest(); + req.responseType = 'blob'; + + req.open('POST', this.url); + var _t = this; + req.onload = function( ev ) + { + if (req.status == 200) { + Roo.log(ev); + var cd = req.getResponseHeader('Content-Disposition'); + + var filename = ''; + var matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(cd); + if (matches != null && matches[1]) { + filename = matches[1].replace(/['"]/g, ''); + } + + var blob = new Blob([req.response], {type: req.responseType }); + + var a = document.createElement("a"); + a.style = "display: none"; + document.body.appendChild(a); + var url = window.URL.createObjectURL(blob); + a.href = url; + a.download = filename; + a.click(); + //release the reference to the file by revoking the Object URL + window.URL.revokeObjectURL(url); + + _t.success ? _t.success(ev) : ''; + } else { + _t.failure ? _t.failure(ev) : ''; + } + + } + + req.send(this.form); + /* (function() { this.submit = true; this.form.dom.submit(); this.cleanup.defer(this.timeout || 30000,this); }).defer(100, this); - + */ } @@ -145,7 +193,11 @@ Roo.apply(Pman.Download.prototype, { method : 'GET', + success : false, + failure : false, + // private.. + //used by simple GET method. createCsvFrame: function() { if (this.csvFrame) { @@ -167,7 +219,7 @@ Roo.apply(Pman.Download.prototype, { } }, - + /* not used as it didn't work.. onLoad : function() { // requested++; // second request is real one.. @@ -178,7 +230,7 @@ Roo.apply(Pman.Download.prototype, { if (!this.submit) { return false; } - return false; + //return false; var frame = this.csvFrame; var success = true; @@ -193,8 +245,10 @@ Roo.apply(Pman.Download.prototype, { Roo.MessageBox.alert("Download Error", doc.body.innerHTML); success = false; - - + if (this.failure) { + this.failure(); + } + return true; } Roo.log(doc.body.innerHTML); @@ -204,6 +258,9 @@ Roo.apply(Pman.Download.prototype, { Roo.log(e.toString()); Roo.log(e); } + if (this.success) { + this.success(); + } // we can not actually do anything with the frame... as it may actually still be downloading.. return true; @@ -219,11 +276,11 @@ Roo.apply(Pman.Download.prototype, { }, - + */ // private - clean up download elements. cleanup :function() { - Roo.log('cleanup?'); + /* Roo.log('cleanup?'); if (this.form) { this.form.remove(); this.form= false; @@ -235,6 +292,7 @@ Roo.apply(Pman.Download.prototype, { Roo.get(this.csvFrame).remove(); this.csvFrame= false; } + */ }, @@ -260,7 +318,7 @@ Roo.apply(Pman.Download.prototype, { this.url = this.grid.ds.proxy.conn.url; - this.method = this.grid.ds.proxy.conn.method ; + this.method = this.method || this.grid.ds.proxy.conn.method ; var t = this; // work out the cols @@ -282,7 +340,7 @@ Roo.apply(Pman.Download.prototype, { // do it as a post, as args can get long.. - this.method = this.method || 'POST'; + this.method = 'POST'; if (this.method == 'POST') { this.params._get = 1; }