From 23f32b3cf1bf3b4599c7e293c0cadb29e79b84f8 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 4 Jun 2026 15:00:32 +0700 Subject: [PATCH] refactor: simplify image base64 encoding in report export actions using MediaDataUri --- .../Report/ExportAllReportsPdfAction.php | 11 ++------ .../Actions/Report/ExportReportPdfAction.php | 11 ++------ app/Filament/Support/MediaDataUri.php | 27 +++++++++++++++++++ 3 files changed, 31 insertions(+), 18 deletions(-) create mode 100644 app/Filament/Support/MediaDataUri.php diff --git a/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportAllReportsPdfAction.php b/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportAllReportsPdfAction.php index 56847fa..ef11393 100644 --- a/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportAllReportsPdfAction.php +++ b/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportAllReportsPdfAction.php @@ -3,6 +3,7 @@ namespace App\Filament\Resources\Manage\Cooperations\Actions\Report; use App\Enums\RoleEnum; +use App\Filament\Support\MediaDataUri; use App\Settings\GeneralSettings; use Barryvdh\DomPDF\Facade\Pdf; use Filament\Actions\Action; @@ -35,15 +36,7 @@ protected function setUp(): void } $records->each(function ($record) { - $image = $record->getFirstMedia('reports'); - $record->imageBase64 = null; - if ($image) { - $imagePath = $image->getPath(); - if (file_exists($imagePath)) { - $imageData = base64_encode(file_get_contents($imagePath)); - $record->imageBase64 = 'data:image/'.pathinfo($imagePath, PATHINFO_EXTENSION).';base64,'.$imageData; - } - } + $record->imageBase64 = MediaDataUri::fromMedia($record->getFirstMedia('reports')); }); return response()->streamDownload(function () use ($records, $settings, $logoBase64) { diff --git a/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php b/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php index c84110c..8d27e9d 100644 --- a/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php +++ b/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php @@ -3,6 +3,7 @@ namespace App\Filament\Resources\Manage\Cooperations\Actions\Report; use App\Enums\RoleEnum; +use App\Filament\Support\MediaDataUri; use App\Models\Report; use App\Settings\GeneralSettings; use Barryvdh\DomPDF\Facade\Pdf; @@ -34,15 +35,7 @@ protected function setUp(): void $logoBase64 = 'data:image/'.pathinfo($logoPath, PATHINFO_EXTENSION).';base64,'.$logoData; } - $image = $record->getFirstMedia('reports'); - $imageBase64 = null; - if ($image) { - $imagePath = $image->getPath(); - if (file_exists($imagePath)) { - $imageData = base64_encode(file_get_contents($imagePath)); - $imageBase64 = 'data:image/'.pathinfo($imagePath, PATHINFO_EXTENSION).';base64,'.$imageData; - } - } + $imageBase64 = MediaDataUri::fromMedia($record->getFirstMedia('reports')); return response()->streamDownload(function () use ($record, $settings, $logoBase64, $imageBase64) { echo Pdf::loadHtml( diff --git a/app/Filament/Support/MediaDataUri.php b/app/Filament/Support/MediaDataUri.php new file mode 100644 index 0000000..7c02d0f --- /dev/null +++ b/app/Filament/Support/MediaDataUri.php @@ -0,0 +1,27 @@ +disk); + $path = $media->getPathRelativeToRoot(); + + if (! $disk->exists($path)) { + return null; + } + + $mime = $media->mime_type ?: 'application/octet-stream'; + + return 'data:'.$mime.';base64,'.base64_encode($disk->get($path)); + } +}