From 0cb49545795fae0507ac42b60b837e1e505bee11 Mon Sep 17 00:00:00 2001 From: AmirmahdiNourkazemi Date: Wed, 3 Jun 2026 12:11:28 +0330 Subject: [PATCH] fix --- app/Http/Controllers/CatalogController.php | 7 +++++-- app/Http/Controllers/MediaController.php | 15 ++++++++++---- app/Http/Controllers/MusicController.php | 9 +++++---- app/Models/Media.php | 7 +++---- app/Traits/HandlesImageUpload.php | 5 ++++- app/Traits/StoresUploads.php | 23 ++++++++++++++++++++++ 6 files changed, 51 insertions(+), 15 deletions(-) create mode 100644 app/Traits/StoresUploads.php diff --git a/app/Http/Controllers/CatalogController.php b/app/Http/Controllers/CatalogController.php index 28246f1..e328f1e 100644 --- a/app/Http/Controllers/CatalogController.php +++ b/app/Http/Controllers/CatalogController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Traits\StoresUploads; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; @@ -12,6 +13,8 @@ */ abstract class CatalogController extends Controller { + use StoresUploads; + /** @return class-string<\Illuminate\Database\Eloquent\Model> */ abstract protected function modelClass(): string; @@ -52,7 +55,7 @@ public function store(Request $request) foreach ($this->fileFields() as $field => $config) { $attributes[$config['column']] = $request->hasFile($field) - ? $request->file($field)->store($config['folder'], 'public') + ? $this->storeUpload($request->file($field), $config['folder']) : null; } @@ -82,7 +85,7 @@ public function update(Request $request, $id) if ($item->{$config['column']}) { Storage::disk('public')->delete($item->{$config['column']}); } - $item->{$config['column']} = $request->file($field)->store($config['folder'], 'public'); + $item->{$config['column']} = $this->storeUpload($request->file($field), $config['folder']); } } diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index 8972b6b..40aefbe 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -8,13 +8,14 @@ use App\Models\SubCategory; use App\Models\Tag; use App\Traits\HandlesImageUpload; +use App\Traits\StoresUploads; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; class MediaController extends Controller { - use HandlesImageUpload; + use HandlesImageUpload, StoresUploads; // CREATE media public function store(Request $request) @@ -41,19 +42,23 @@ public function store(Request $request) $path = null; if ($request->hasFile('file')) { - $path = $request->file('file')->store('media', 'public'); + $path = $this->storeUpload($request->file('file'), 'media'); } // An uploaded image file takes precedence over a provided image_id. $imageId = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null); + // When a file is uploaded, expose its public URL as external_url too + // (older front-end versions read external_url for the playable source). + $externalUrl = $path ? asset('storage/' . $path) : ($data['external_url'] ?? null); + $media = Media::create([ 'user_id' => auth()->id(), 'title' => $data['title'], 'caption' => $data['caption'] ?? null, 'type' => $data['type'], 'file_path' => $path, - 'external_url' => $data['external_url'] ?? null, + 'external_url' => $externalUrl, 'image_id' => $imageId, 'duration' => $data['duration'] ?? null, 'visibility' => $data['visibility'] ?? 'public', @@ -488,7 +493,9 @@ public function update(Request $request, $id) // --- handle file replace --- if ($request->hasFile('file')) { Storage::disk('public')->delete($media->file_path); - $data['file_path'] = $request->file('file')->store('media', 'public'); + $data['file_path'] = $this->storeUpload($request->file('file'), 'media'); + // Keep external_url pointing at the newly uploaded file for the old front-end. + $data['external_url'] = asset('storage/' . $data['file_path']); } // --- Prepare update data --- diff --git a/app/Http/Controllers/MusicController.php b/app/Http/Controllers/MusicController.php index 38eb58a..b057ddb 100644 --- a/app/Http/Controllers/MusicController.php +++ b/app/Http/Controllers/MusicController.php @@ -6,11 +6,12 @@ use App\Models\MusicPlaylist; use App\Models\Music; use App\Traits\HandlesImageUpload; +use App\Traits\StoresUploads; use Illuminate\Support\Facades\Storage; class MusicController extends Controller { - use HandlesImageUpload; + use HandlesImageUpload, StoresUploads; // Add this new method to your MusicController public function getAllMusic() @@ -160,8 +161,8 @@ public function store(Request $request) ], 422); } - $path = $file->store('music', 'public'); - + $path = $this->storeUpload($file, 'music'); + if (!$path) { return response()->json([ 'message' => 'Failed to store the file' @@ -248,7 +249,7 @@ public function update(Request $request, $id) if ($request->hasFile('file')) { // Delete old file Storage::disk('public')->delete($music->file_path); - $path = $request->file('file')->store('music', 'public'); + $path = $this->storeUpload($request->file('file'), 'music'); $music->file_path = $path; } diff --git a/app/Models/Media.php b/app/Models/Media.php index 6b0b976..8e0ad66 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -31,12 +31,11 @@ class Media extends Model 'user_comment', 'user_comment_id', 'has_user_rated', - 'is_saved', + 'is_saved', 'saved_count', - 'is_liked', + 'is_liked', 'likes_count', -'is_liked', - 'likes_count', + 'url', ]; public function image() { diff --git a/app/Traits/HandlesImageUpload.php b/app/Traits/HandlesImageUpload.php index 0dfd570..a3baee0 100644 --- a/app/Traits/HandlesImageUpload.php +++ b/app/Traits/HandlesImageUpload.php @@ -4,6 +4,7 @@ use App\Models\Image; use Illuminate\Http\Request; +use Illuminate\Support\Str; trait HandlesImageUpload { @@ -18,7 +19,9 @@ protected function uploadedImageId(Request $request, string $field = 'image'): ? return null; } - $path = $request->file($field)->store('images', 'public'); + $file = $request->file($field); + $ext = $file->getClientOriginalExtension() ?: ($file->guessExtension() ?: 'jpg'); + $path = $file->storeAs('images', Str::random(40) . '.' . $ext, 'public'); return Image::create([ 'user_id' => auth()->id(), diff --git a/app/Traits/StoresUploads.php b/app/Traits/StoresUploads.php new file mode 100644 index 0000000..d158d06 --- /dev/null +++ b/app/Traits/StoresUploads.php @@ -0,0 +1,23 @@ +getClientOriginalExtension() + ?: ($file->guessExtension() ?: 'bin'); + + return $file->storeAs($folder, Str::random(40) . '.' . $ext, $disk); + } +}