From b3ec7a8a6a2d428370a27eca0d53bcd5f5c26e7f Mon Sep 17 00:00:00 2001 From: Cameron Ball Date: Mon, 23 Feb 2015 01:02:34 +0800 Subject: [PATCH] better download handling #8 --- Controllers/FileController.php | 6 ++---- Services/Http/HttpResponse.php | 16 +++++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Controllers/FileController.php b/Controllers/FileController.php index 744a5fc..feb9ce1 100644 --- a/Controllers/FileController.php +++ b/Controllers/FileController.php @@ -118,13 +118,11 @@ class FileController implements IDivineController $this->_downloadRepository->save($download); $zip = $this->_configManager->getDirective('filesPath') . '/' . $file->getPath() . '/' . $file->getHash() . '.zip'; - //TODO: This may not work on all browser or something. We'll have to see. Also it may hog ram so... $this->_response->setHeader('Content-Type', $file->getMimetype()) ->setHeader('Content-Length', $file->getSize()) ->setHeader('Content-Disposition', 'filename="' . $file->getFileName() . '";') - ->setHeader('Content-Transfer-Encoding', 'binary') - ->setBody(file_get_contents($zip)) - ->sendResponse(); + ->download($zip); + exit(); } private function notFound() diff --git a/Services/Http/HttpResponse.php b/Services/Http/HttpResponse.php index e115d61..e9e5166 100644 --- a/Services/Http/HttpResponse.php +++ b/Services/Http/HttpResponse.php @@ -96,10 +96,16 @@ class HttpResponse implements IHttpResponse public function download($path) { - $fp = fopen($path, "rb"); - $this->sendHeaders(); - @ob_clean(); - rewind($fp); - fpassthru($fp); + $this->sendResponse(); + $fd = fopen($path, 'r'); + if(!$fd) throw new Exception ('Failed to open file.'); + + while(!feof($fd)) { + $buffer = fread($fd, 2048); + print $buffer; + } + fclose ($fd); + + exit(); } } -- 2.11.0