storeAs( "devoirs/{$devoirId}/{$eleveId}", now()->format('Ymd-His').'-'.Str::random(8).'.'.$fichier->getClientOriginalExtension(), 's3' ); return [ 'chemin' => $chemin, 'nom_original' => $fichier->getClientOriginalName(), 'taille_octets' => $fichier->getSize(), ]; } public static function supprimer(?string $chemin): void { if ($chemin !== null) { Storage::disk('s3')->delete($chemin); } } /** Lien valable 5 minutes, jamais le fichier servi en clair par le portail. */ public static function urlTemporaire(string $chemin): string { return Storage::disk('s3')->temporaryUrl($chemin, now()->addMinutes(5)); } }