Changeset View
Changeset View
Standalone View
Standalone View
src/app/Backends/Storage.php
Show First 20 Lines • Show All 67 Lines • ▼ Show 20 Lines | public static function fileDownload(Item $file): StreamedResponse | ||||
$props = $file->getProperties(['name', 'size', 'mimetype']); | $props = $file->getProperties(['name', 'size', 'mimetype']); | ||||
// Prepare the file name for the Content-Disposition header | // Prepare the file name for the Content-Disposition header | ||||
$extension = pathinfo($props['name'], \PATHINFO_EXTENSION) ?: 'file'; | $extension = pathinfo($props['name'], \PATHINFO_EXTENSION) ?: 'file'; | ||||
$fallbackName = str_replace('%', '', Str::ascii($props['name'])) ?: "file.{$extension}"; | $fallbackName = str_replace('%', '', Str::ascii($props['name'])) ?: "file.{$extension}"; | ||||
$disposition = $response->headers->makeDisposition('attachment', $props['name'], $fallbackName); | $disposition = $response->headers->makeDisposition('attachment', $props['name'], $fallbackName); | ||||
$response->headers->replace([ | $response->headers->replace([ | ||||
'Content-Length' => $props['size'] ?: 0, | |||||
'Content-Type' => $props['mimetype'], | 'Content-Type' => $props['mimetype'], | ||||
'Content-Disposition' => $disposition, | 'Content-Disposition' => $disposition, | ||||
]); | ]); | ||||
$response->setCallback(function () use ($file) { | $response->setCallback(function () use ($file) { | ||||
$file->chunks()->orderBy('sequence')->get()->each(function ($chunk) use ($file) { | $file->chunks()->orderBy('sequence')->get()->each(function ($chunk) use ($file) { | ||||
$disk = LaravelStorage::disk('files'); | $disk = LaravelStorage::disk('files'); | ||||
$path = Storage::chunkLocation($chunk->chunk_id, $file); | $path = Storage::chunkLocation($chunk->chunk_id, $file); | ||||
▲ Show 20 Lines • Show All 210 Lines • Show Last 20 Lines |