From 4a924bf400c7015bb337188fc14e1a0cb77a8d0a Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Wed, 9 Apr 2025 17:40:25 +0200 Subject: [PATCH] fix(previews): avoid large file downloads for remote movie storage Prevent downloading entire movie files from remote storage (e.g., S3) when the 'moov atom' is located at the end of the file. Signed-off-by: Misha M.-Kupriyanov --- lib/private/Preview/Movie.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/private/Preview/Movie.php b/lib/private/Preview/Movie.php index 46462dfa592bf..7de543198f40d 100644 --- a/lib/private/Preview/Movie.php +++ b/lib/private/Preview/Movie.php @@ -54,10 +54,15 @@ public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage { $result = null; if ($this->useTempFile($file)) { - // try downloading 5 MB first as it's likely that the first frames are present there - // in some cases this doesn't work for example when the moov atom is at the - // end of the file, so if it fails we fall back to getting the full file - $sizeAttempts = [5242880, null]; + // Try downloading 5 MB first, as it's likely that the first frames are present there. + // In some cases this doesn't work, for example when the moov atom is at the + // end of the file, so if it fails we fall back to getting the full file. + // Unless the file is not local (e.g. S3) as we do not want to download the whole (e.g. 37Gb) file + if ($file->getStorage()->isLocal()) { + $sizeAttempts = [5242880, null]; + } else { + $sizeAttempts = [5242880]; + } } else { // size is irrelevant, only attempt once $sizeAttempts = [null];