Replace controller-driven Blade views with full-page Livewire index/show/create flows so Flux tables, toasts, and uploads work natively.
35 lines
895 B
PHP
35 lines
895 B
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Recording;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
|
|
class StreamRecordingController extends Controller
|
|
{
|
|
/**
|
|
* Stream the recording audio for in-browser playback.
|
|
*/
|
|
public function __invoke(Recording $recording): StreamedResponse
|
|
{
|
|
Gate::authorize('view', $recording);
|
|
|
|
abort_unless(
|
|
$recording->file_path && Storage::disk('local')->exists($recording->file_path),
|
|
404,
|
|
);
|
|
|
|
return Storage::disk('local')->response(
|
|
$recording->file_path,
|
|
$recording->original_filename,
|
|
[
|
|
'Content-Type' => $recording->audioMimeType(),
|
|
'Accept-Ranges' => 'bytes',
|
|
],
|
|
'inline',
|
|
);
|
|
}
|
|
}
|