From f4639c9bb251f0ebebea636926fe4708459133a5 Mon Sep 17 00:00:00 2001 From: Bernd Bestel Date: Thu, 18 May 2023 10:51:14 +0200 Subject: [PATCH] Stream files directly from disk (instead of loading them completely in memory first) --- controllers/FilesApiController.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/controllers/FilesApiController.php b/controllers/FilesApiController.php index ff16f0f7..6703eaea 100644 --- a/controllers/FilesApiController.php +++ b/controllers/FilesApiController.php @@ -6,6 +6,7 @@ use Grocy\Services\FilesService; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Exception\HttpNotFoundException; +use Slim\Psr7\Stream; class FilesApiController extends BaseApiController { @@ -51,10 +52,10 @@ class FilesApiController extends BaseApiController if (file_exists($filePath)) { - $response->write(file_get_contents($filePath)); $response = $response->withHeader('Cache-Control', 'max-age=2592000'); $response = $response->withHeader('Content-Type', mime_content_type($filePath)); - return $response->withHeader('Content-Disposition', 'inline; filename="' . $fileName . '"'); + $response = $response->withHeader('Content-Disposition', 'inline; filename="' . $fileName . '"'); + return $response->withBody(new Stream(fopen($filePath, 'rb'))); } else { @@ -82,10 +83,10 @@ class FilesApiController extends BaseApiController if (file_exists($filePath)) { - $response->write(file_get_contents($filePath)); $response = $response->withHeader('Cache-Control', 'max-age=2592000'); $response = $response->withHeader('Content-Type', mime_content_type($filePath)); - return $response->withHeader('Content-Disposition', 'inline; filename="' . $fileName . '"'); + $response = $response->withHeader('Content-Disposition', 'inline; filename="' . $fileName . '"'); + return $response->withBody(new Stream(fopen($filePath, 'rb'))); } else {