2016-04-06 11 views
1

Ich bekomme ein Byte-Array von einer REST-API. Dann erstelle ich eine lokale Datei von diesem Byte-Array. Und ich kann diese Datei mit ZF2 an den Browser senden.ZF2 Stream mit Byte-Array

-Code aus ZF2 Controller-Aktion:

file_put_contents($fullpath, $rawPdf); 
$headers = new \Zend\Http\Headers(); 
$contentDisposition = ($view == 'inline') ? 'inline': 'attachment'; 
$headers->addHeaders(array(
    'Content-Disposition' => $contentDisposition . '; filename="' . basename($fullpath) . '"', 
    'Content-Type' => 'application/pdf', 
    'Content-Length' => filesize($fullpath), 
    'Expires' => '@0', 
    'Cache-Control' => 'must-revalidate', 
    'Pragma' => 'public' 
)); 
$response = new \Zend\Http\Response\Stream(); 
$response->setStream(fopen($fullpath, 'r')); 
$response->setStreamName(basename($fullpath)); 
$response->setStatusCode(200); 
$response->setHeaders($headers); 
return $response; 

Aber es werde direkt den Byte-Array an den Browser senden, ohne eine lokale Datei.

Wie kann ich Stream ($ response-> setStream()) mit Byte-Array einstellen? Wie erstellt man eine Ressource mit einem Byte-Array, aber ohne eine lokale Datei zu erstellen?

Mit einfacher alter PHP kann ich das tun:

$rawPdf = ''; 
array_walk($byteArray, function($value) use (&$rawPdf) { 
    $rawPdf .= chr($value); 
}); 
header('Content-type: application/pdf'); 
header('Content-Disposition: inline; filename="Bericht.pdf"'); 
header('Content-Transfer-Encoding: binary'); 
header('Accept-Ranges: bytes'); 
echo $rawPdf; 
+0

Ich glaube, Sie $ response-> setContent ($ rawPdf) zu tun haben; – peterpeterson

+0

Sie können eine Datei in 'php: // output' schreiben und den Download erzwingen – ceadreak

Antwort

1

Dies ist ein vereinfachtes Beispiel für den Code, den ich verwende einige Daten in einer CSV-Datei zu exportieren und wenn automatisch herunterladen.

Sie können es anpassen passen, was Sie wollen

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename="csv_file.csv'); 
header('Cache-Control: max-age=0'); 

$file = fopen('php://output', 'w'); 

foreach ($this->getData() as $data) 
{ 
    fputcsv($file, $data); 
} 

fclose($file); 
exit(0);