From d2a878e98e53d6c6993d3525e849006364ce0137 Mon Sep 17 00:00:00 2001 From: bbx0 <39773919+bbx0@users.noreply.github.com> Date: Fri, 23 Feb 2024 17:56:32 +0100 Subject: [PATCH] Stream uploads to file (#2477) * Stream uploads to file * Adapt code style / use up to date reasonable chunk size --------- Co-authored-by: Bernd Bestel --- controllers/FilesApiController.php | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/controllers/FilesApiController.php b/controllers/FilesApiController.php index 6703eaea..3cdda9c1 100644 --- a/controllers/FilesApiController.php +++ b/controllers/FilesApiController.php @@ -109,9 +109,27 @@ class FilesApiController extends BaseApiController } $fileName = $this->checkFileName($args['fileName']); - $data = $request->getBody()->getContents(); - file_put_contents($this->getFilesService()->GetFilePath($args['group'], $fileName), $data); + $fileHandle = fopen($this->getFilesService()->GetFilePath($args['group'], $fileName), 'xb'); + if($fileHandle === false) + { + throw new \Exception("Error while creating file $fileName"); + } + + // Save the file to disk in chunks of 1 MB + $requestBody = $request->getBody(); + while ($data = $requestBody->read(1048576)) + { + if (fwrite($fileHandle, $data) === false) + { + throw new \Exception("Error while writing file $fileName"); + } + } + + if (fclose($fileHandle) === false) + { + throw new \Exception("Error while closing file $fileName"); + } return $this->EmptyApiResponse($response); }