fix
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Traits\StoresUploads;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
*/
|
*/
|
||||||
abstract class CatalogController extends Controller
|
abstract class CatalogController extends Controller
|
||||||
{
|
{
|
||||||
|
use StoresUploads;
|
||||||
|
|
||||||
/** @return class-string<\Illuminate\Database\Eloquent\Model> */
|
/** @return class-string<\Illuminate\Database\Eloquent\Model> */
|
||||||
abstract protected function modelClass(): string;
|
abstract protected function modelClass(): string;
|
||||||
|
|
||||||
@@ -52,7 +55,7 @@ public function store(Request $request)
|
|||||||
|
|
||||||
foreach ($this->fileFields() as $field => $config) {
|
foreach ($this->fileFields() as $field => $config) {
|
||||||
$attributes[$config['column']] = $request->hasFile($field)
|
$attributes[$config['column']] = $request->hasFile($field)
|
||||||
? $request->file($field)->store($config['folder'], 'public')
|
? $this->storeUpload($request->file($field), $config['folder'])
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +85,7 @@ public function update(Request $request, $id)
|
|||||||
if ($item->{$config['column']}) {
|
if ($item->{$config['column']}) {
|
||||||
Storage::disk('public')->delete($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']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,14 @@
|
|||||||
use App\Models\SubCategory;
|
use App\Models\SubCategory;
|
||||||
use App\Models\Tag;
|
use App\Models\Tag;
|
||||||
use App\Traits\HandlesImageUpload;
|
use App\Traits\HandlesImageUpload;
|
||||||
|
use App\Traits\StoresUploads;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class MediaController extends Controller
|
class MediaController extends Controller
|
||||||
{
|
{
|
||||||
use HandlesImageUpload;
|
use HandlesImageUpload, StoresUploads;
|
||||||
|
|
||||||
// CREATE media
|
// CREATE media
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
@@ -41,19 +42,23 @@ public function store(Request $request)
|
|||||||
|
|
||||||
$path = null;
|
$path = null;
|
||||||
if ($request->hasFile('file')) {
|
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.
|
// An uploaded image file takes precedence over a provided image_id.
|
||||||
$imageId = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null);
|
$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([
|
$media = Media::create([
|
||||||
'user_id' => auth()->id(),
|
'user_id' => auth()->id(),
|
||||||
'title' => $data['title'],
|
'title' => $data['title'],
|
||||||
'caption' => $data['caption'] ?? null,
|
'caption' => $data['caption'] ?? null,
|
||||||
'type' => $data['type'],
|
'type' => $data['type'],
|
||||||
'file_path' => $path,
|
'file_path' => $path,
|
||||||
'external_url' => $data['external_url'] ?? null,
|
'external_url' => $externalUrl,
|
||||||
'image_id' => $imageId,
|
'image_id' => $imageId,
|
||||||
'duration' => $data['duration'] ?? null,
|
'duration' => $data['duration'] ?? null,
|
||||||
'visibility' => $data['visibility'] ?? 'public',
|
'visibility' => $data['visibility'] ?? 'public',
|
||||||
@@ -488,7 +493,9 @@ public function update(Request $request, $id)
|
|||||||
// --- handle file replace ---
|
// --- handle file replace ---
|
||||||
if ($request->hasFile('file')) {
|
if ($request->hasFile('file')) {
|
||||||
Storage::disk('public')->delete($media->file_path);
|
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 ---
|
// --- Prepare update data ---
|
||||||
|
|||||||
@@ -6,11 +6,12 @@
|
|||||||
use App\Models\MusicPlaylist;
|
use App\Models\MusicPlaylist;
|
||||||
use App\Models\Music;
|
use App\Models\Music;
|
||||||
use App\Traits\HandlesImageUpload;
|
use App\Traits\HandlesImageUpload;
|
||||||
|
use App\Traits\StoresUploads;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class MusicController extends Controller
|
class MusicController extends Controller
|
||||||
{
|
{
|
||||||
use HandlesImageUpload;
|
use HandlesImageUpload, StoresUploads;
|
||||||
|
|
||||||
// Add this new method to your MusicController
|
// Add this new method to your MusicController
|
||||||
public function getAllMusic()
|
public function getAllMusic()
|
||||||
@@ -160,8 +161,8 @@ public function store(Request $request)
|
|||||||
], 422);
|
], 422);
|
||||||
}
|
}
|
||||||
|
|
||||||
$path = $file->store('music', 'public');
|
$path = $this->storeUpload($file, 'music');
|
||||||
|
|
||||||
if (!$path) {
|
if (!$path) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'Failed to store the file'
|
'message' => 'Failed to store the file'
|
||||||
@@ -248,7 +249,7 @@ public function update(Request $request, $id)
|
|||||||
if ($request->hasFile('file')) {
|
if ($request->hasFile('file')) {
|
||||||
// Delete old file
|
// Delete old file
|
||||||
Storage::disk('public')->delete($music->file_path);
|
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;
|
$music->file_path = $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,12 +31,11 @@ class Media extends Model
|
|||||||
'user_comment',
|
'user_comment',
|
||||||
'user_comment_id',
|
'user_comment_id',
|
||||||
'has_user_rated',
|
'has_user_rated',
|
||||||
'is_saved',
|
'is_saved',
|
||||||
'saved_count',
|
'saved_count',
|
||||||
'is_liked',
|
'is_liked',
|
||||||
'likes_count',
|
'likes_count',
|
||||||
'is_liked',
|
'url',
|
||||||
'likes_count',
|
|
||||||
];
|
];
|
||||||
public function image()
|
public function image()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
use App\Models\Image;
|
use App\Models\Image;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
trait HandlesImageUpload
|
trait HandlesImageUpload
|
||||||
{
|
{
|
||||||
@@ -18,7 +19,9 @@ protected function uploadedImageId(Request $request, string $field = 'image'): ?
|
|||||||
return null;
|
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([
|
return Image::create([
|
||||||
'user_id' => auth()->id(),
|
'user_id' => auth()->id(),
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Traits;
|
||||||
|
|
||||||
|
use Illuminate\Http\UploadedFile;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
trait StoresUploads
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Store an uploaded file under a random name while preserving its real
|
||||||
|
* extension (from the original filename). Laravel's default store() derives
|
||||||
|
* the extension from the sniffed MIME type, which yields ".bin" for files
|
||||||
|
* that sniff as application/octet-stream (e.g. some valid .mp3 files).
|
||||||
|
*/
|
||||||
|
protected function storeUpload(UploadedFile $file, string $folder, string $disk = 'public'): string
|
||||||
|
{
|
||||||
|
$ext = $file->getClientOriginalExtension()
|
||||||
|
?: ($file->guessExtension() ?: 'bin');
|
||||||
|
|
||||||
|
return $file->storeAs($folder, Str::random(40) . '.' . $ext, $disk);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user