diff --git a/lib/Controller/AssistantApiController.php b/lib/Controller/AssistantApiController.php index 6f0270721..1b9ff145b 100644 --- a/lib/Controller/AssistantApiController.php +++ b/lib/Controller/AssistantApiController.php @@ -399,10 +399,18 @@ public function getOutputFilePreview(int $ocpTaskId, int $fileId, ?int $x = 100, public function getOutputFile(int $ocpTaskId, int $fileId): DataDownloadResponse|DataResponse { try { $taskOutputFile = $this->assistantService->getTaskOutputFile($this->userId, $ocpTaskId, $fileId); - $realMime = mime_content_type($taskOutputFile->fopen('rb')); + $head = fread($taskOutputFile->fopen('rb'), 4096); + $realMime = (new \finfo(FILEINFO_MIME_TYPE))->buffer($head); + + $fileName = $ocpTaskId . '-' . $fileId; + $extension = pathinfo($taskOutputFile->getName(), PATHINFO_EXTENSION); + if ($extension !== '') { + $fileName .= '.' . $extension; + } + $response = new DataDownloadResponse( $taskOutputFile->getContent(), - $ocpTaskId . '-' . $fileId, + $fileName, $realMime ?: 'application/octet-stream', ); $response->cacheFor(60 * 60 * 24, false, true); diff --git a/lib/Service/AssistantService.php b/lib/Service/AssistantService.php index 7376546e1..be045b45b 100644 --- a/lib/Service/AssistantService.php +++ b/lib/Service/AssistantService.php @@ -628,7 +628,8 @@ public function saveOutputFile(string $userId, int $ocpTaskId, int $fileId): arr * @throws NotPermittedException */ private function getTargetFileName(File $file): string { - $mimeType = mime_content_type($file->fopen('rb')); + $head = fread($file->fopen('rb'), 4096); + $mimeType = (new \finfo(FILEINFO_MIME_TYPE))->buffer($head); $fileName = $file->getName(); $mimes = new \Mimey\MimeTypes; @@ -692,7 +693,8 @@ private function extractFileIdsFromTask(Task $task): array { */ public function getOutputFilePreviewFile(string $userId, int $taskId, int $fileId, ?int $x = 100, ?int $y = 100): ?array { $taskOutputFile = $this->getTaskOutputFile($userId, $taskId, $fileId); - $realMime = mime_content_type($taskOutputFile->fopen('rb')); + $head = fread($taskOutputFile->fopen('rb'), 4096); + $realMime = (new \finfo(FILEINFO_MIME_TYPE))->buffer($head); return $this->previewService->getFilePreviewFile($taskOutputFile, $x, $y, $realMime ?: null); }