From 10fa25680940c476a09c6c84777776c456d6cf97 Mon Sep 17 00:00:00 2001 From: Joshua Dwire Date: Wed, 23 Mar 2016 20:46:09 -0400 Subject: [PATCH] Use stream when downloading documents --- app/Http/Controllers/DocumentController.php | 19 ++++++++++++++++--- app/Models/Document.php | 6 ++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/DocumentController.php b/app/Http/Controllers/DocumentController.php index d19909bae0ad..4bd9be884696 100644 --- a/app/Http/Controllers/DocumentController.php +++ b/app/Http/Controllers/DocumentController.php @@ -38,10 +38,23 @@ class DocumentController extends BaseController return redirect($direct_url); } + $stream = $document->getStream(); - $response = Response::make($document->getRaw(), 200); - $response->header('content-type', $document->type); - + if($stream){ + $headers = [ + 'Content-Type' => $document->type, + 'Content-Length' => $document->size, + ]; + + $response = Response::stream(function() use ($stream) { + fpassthru($stream); + }, 200, $headers); + } + else{ + $response = Response::make($document->getRaw(), 200); + $response->header('content-type', $document->type); + } + return $response; } diff --git a/app/Models/Document.php b/app/Models/Document.php index 2d61cb7e3ba6..aeff8099e5d7 100644 --- a/app/Models/Document.php +++ b/app/Models/Document.php @@ -122,6 +122,12 @@ class Document extends EntityModel return $disk->get($this->path); } + public function getStream(){ + $disk = $this->getDisk(); + + return $disk->readStream($this->path); + } + public function getRawPreview(){ $disk = $this->getDisk();