Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Quick example of how to download/stream a file using Zend Expressive.
* This is a quick example of how to stream a file to a client, likely a browser,
* using Zend Expressive. There are a lot of factors which it doesn't take in to
* account. But for the purposes of a quick intro, this should suffice.
class ViewDocumentPageAction
protected function downloadFile()
$file = 'path/to/your/file';
// create a Stream object, to stream your file to the client
$body = new Stream('php://temp', 'w+');
// Return a response, containing all of the appropriate headers for
// the file that you're sending to the client. You could initialise a
// class which does all this for you, instead of having to remember
// them all by hand. But I'm keen to provide full transparency in
// this example.
return $response
->withHeader('Content-Type', 'application/octet-stream')
"attachment; filename=" . basename($file)
->withHeader('Content-Transfer-Encoding', 'Binary')
->withHeader('Content-Description', 'File Transfer')
->withHeader('Pragma', 'public')
->withHeader('Expires', '0')
->withHeader('Cache-Control', 'must-revalidate')
->withHeader('Content-Length', "{$body->getSize()}");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment