2016-08-11 3 views
0
Download

Ich verwende liuggio/ExcelBundle, dies ist mein Code zu schreiben und die xlsx herunterladen:Symfony und PHPExcel (mit React.js), nicht

$writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007'); 
    $response = $this->get('phpexcel')->createStreamedResponse($writer); 
    $dispositionHeader = $response->headers->makeDisposition(
     ResponseHeaderBag::DISPOSITION_ATTACHMENT, 
     'XXX_-_' . (new \DateTime())->format('Y_n_j') . '.xlsx' 
    ); 
    $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'); 
    $response->headers->set('Cache-Control', 'maxage=1'); 
    $response->headers->set('Content-Disposition', $dispositionHeader); 

Wenn ich die Methode direkt von einem Aufruf Reagieren Komponente es herunterladen ok:

e.preventDefault(); 
    location.href = path.url_descarga_excel; 
    $.UIkit.init(); 

Aber ich muss einige Argumente übergeben. Wenn ich versuche, mit AJAX zum Download:

e.preventDefault(); 

    var sist_electrico = { 
     sic: ReactDom.findDOMNode(this.refs.SIC).checked, 
     sing: ReactDom.findDOMNode(this.refs.SING).checked 
    }; 

    var periodo = { 
     inicio: this.refs.fechaInicio.getValue(), 
     fin: this.refs.fechaFin.getValue() 
    }; 

    var form = $('input[name="radio_tipoForm"]:checked').val(); 

    $.ajax({ 
     url:path.url_descarga_excel, async:false, 
     type:"post", dataType:"json", data:{form, sist_electrico, periodo}, 
    }); 

es doens't herunterladen, es zeigt nur die Zeichen der Datei in der Vorschau von Chrome:

Vorschau:

PK�QI%���a[Content_Types].xml͔]K�0���%��f� "�v��R... etc 

Headers:

Request URL:http://XXX/app_dev.php/reporte/descargaExcel 
    Request Method:POST 
    Status Code:200 OK 
    Response Headers 
    view source 
    Cache-Control:maxage=1, private 
    Connection:Keep-Alive 
    Content-Disposition:attachment; filename="XXX.xlsx" 
    Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8 
    Date:Thu, 11 Aug 2016 14:15:50 GMT 
    Keep-Alive:timeout=5, max=100 
    Server:Apache/2.4.6 (CentOS) mod_fcgid/2.3.9 PHP/5.4.45 
    Transfer-Encoding:chunked 
    X-Debug-Token:ea66a8 
    X-Debug-Token-Link:/app_dev.php/_profiler/ea66a8 
    X-Powered-By:PHP/5.4.45 
    Request Headers 
    view source 
    Accept:application/json, text/javascript, */*; q=0.01 
    Accept-Encoding:gzip, deflate 
    Accept-Language:es-ES,es;q=0.8 
    Cache-Control:no-cache 
    Connection:keep-alive 
    Content-Length:108 
    Content-Type:application/x-www-form-urlencoded; charset=UTF-8 
    Cookie:PHPSESSID=m6tcoofak8ihe02nit0nj7lj85 
    Host:cnecontrato.adevcom.cl 
    Origin:XXX 
    Pragma:no-cache 
    Referer:http://XXX/app_dev.php 
    User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
    X-Requested-With:XMLHttpRequest 

Was mache ich falsch?

+0

Ich benutze auch $ writer-> save ('php: // output'); Am Ende des Codes, aber der einzige Unterschied ist das: http://fotos.subefotos.com/69cda253c4e362862c62b6702e048127o.png – pmirnd

+0

Ich habe gerade gelesen, dass es nicht möglich ist, Dateien herunterzuladen, obwohl Ajax Anrufe aufgrund von JavaScript-Sicherheit, nicht wissen, wie man diese Argumente übergibt und die Datei herunterlädt, kann keine Hilfe dafür sehen. Alles, was die Leute vorschlagen, ist, window.location zu verwenden, um das onClick in einem anderen Fenster zu öffnen, aber das ist nicht mein Fall ... – pmirnd

Antwort

0

Nun, schließlich habe ich das gerade:

exportarExcel:function(e){ 
    e.preventDefault(); 

    var sist_electrico = { 
     sic: ReactDom.findDOMNode(this.refs.SIC).checked, 
     sing: ReactDom.findDOMNode(this.refs.SING).checked 
    }; 

    var periodo = { 
     inicio: this.refs.fechaInicio.getValue(), 
     fin: this.refs.fechaFin.getValue() 
    }; 

    var form = $('input[name="radio_tipoForm"]:checked').val(); 

    location.href = path.url_descarga_excel + "?form=" + form + "&sist_electrico=" + sist_electrico + "&periodo=" + periodo; 
    $.UIkit.init(); 

die alte location.href mit Parametern. Jetzt empfängt das PHP die Parameter und das xlsx wird korrekt heruntergeladen.