Untitled
unknown
plain_text
a year ago
8.2 kB
29
Indexable
<?php namespace App\Repositories\Upload; use App\Models\Upload; use App\Repositories\Upload\UploadInterface; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Log; use Intervention\Image\Facades\Image; // Đảm bảo Intervention Image được sử dụng đúng cách class UploadRepository implements UploadInterface { public function upload($folder = '', $image_id = '', $new_image = null) { try { $image_path = ''; if ($new_image) { $image_folder_path = public_path('uploads/' . $folder); // Tạo thư mục nếu chưa tồn tại if (!File::exists(public_path('uploads'))) { File::makeDirectory(public_path('uploads'), 0755, true); } if ($folder && !File::exists($image_folder_path)) { File::makeDirectory($image_folder_path, 0755, true); } $image_name = date('YmdHisA') . \Str::random(5) . '.' . $new_image->getClientOriginalExtension(); $new_image->move($image_folder_path, $image_name); $image_path = 'uploads/' . ($folder ? $folder . '/' : '') . $image_name; } $upload = Upload::find($image_id); if ($upload) { if ($upload->original && File::exists(public_path($upload->original))) { unlink(public_path($upload->original)); // Xóa hình ảnh cũ } } else if ($new_image) { $upload = new Upload(); } else { return null; } if ($image_path) { $upload->original = $image_path; } $upload->save(); return $upload->id; } catch (\Throwable $th) { Log::error('Upload failed: ' . $th->getMessage()); return null; } } public function unlinkImage($image_id = '') { try { $upload = Upload::find($image_id); if ($upload) { foreach (['original', 'image_one', 'image_two', 'image_three'] as $field) { if ($upload->$field && File::exists(public_path($upload->$field))) { unlink(public_path($upload->$field)); } } $upload->delete(); } return true; } catch (\Throwable $th) { Log::error('Unlink image failed: ' . $th->getMessage()); return false; } } public function linktoAvatarUpload($user = null, $avatar_original = null) { try { if ($user && $avatar_original) { $file = file_get_contents($avatar_original); $file_name = date('YmdHisA') . $user->id . '.jpg'; $file_path = public_path('uploads/profile/') . $file_name; File::put($file_path, $file); $upload = new Upload(); $upload->original = 'uploads/profile/' . $file_name; $upload->save(); return $upload->id; } return null; } catch (\Throwable $th) { Log::error('Avatar upload failed: ' . $th->getMessage()); return null; } } public function linktoImageUpload($folder = '', $image = null) { try { $image_folder_path = public_path('uploads/' . $folder); if ($folder && !File::exists($image_folder_path)) { File::makeDirectory($image_folder_path, 0755, true); } if ($image) { $file = file_get_contents($image); $file_name = date('YmdHisA') . rand(100000, 900000) . '.jpg'; $file_path = public_path('uploads/' . ($folder ? $folder . '/' : '')) . $file_name; File::put($file_path, $file); $upload = new Upload(); $upload->original = 'uploads/' . ($folder ? $folder . '/' : '') . $file_name; $upload->image_one = $upload->original; $upload->image_two = $upload->original; $upload->image_three = $upload->original; $upload->save(); return $upload->id; } return null; } catch (\Throwable $th) { Log::error('Image upload failed: ' . $th->getMessage()); return null; } } public function uploadImage($image, $path, $image_sizes, $old_upload_id) { try { // Xóa các hình ảnh đã tải lên trước đó if ($old_upload_id) { $this->deleteImage($old_upload_id, 'update'); } $info = getimagesize($image); $fileType = strtolower(image_type_to_extension($info[2])); $fileType = ltrim($fileType, '.'); if ($fileType == 'jpg') { $fileType = 'jpeg'; } $convertMethod = 'imagecreatefrom' . $fileType; $directory = public_path("uploads/" . $path); if (!File::exists($directory)) { File::makeDirectory($directory, 0755, true); } // Lưu hình ảnh gốc $originalImageName = $this->imageName('original', $fileType); $originalImageUrl = $directory . '/' . $originalImageName; $this->imageSaveToStorage($convertMethod, $originalImageUrl, $image, 'original'); $all_url = []; foreach ($image_sizes as $key => $image_size) { $imageName = $this->imageName(++$key, 'webp'); $imageUrl = $directory . '/' . $imageName; $all_url[] = $imageUrl; $this->imageSaveToStorage($convertMethod, $imageUrl, $image, '', $image_size[1], $image_size[0]); } $upload = $old_upload_id ? Upload::find($old_upload_id) : new Upload(); if (!$upload) { $upload = new Upload(); } $public_path = public_path('uploads'); $upload->original = str_replace($public_path, 'uploads', $originalImageUrl); $upload->image_one = isset($all_url[0]) ? str_replace($public_path, 'uploads', $all_url[0]) : null; $upload->image_two = isset($all_url[1]) ? str_replace($public_path, 'uploads', $all_url[1]) : null; $upload->image_three = isset($all_url[2]) ? str_replace($public_path, 'uploads', $all_url[2]) : null; $upload->save(); return $upload->id; } catch (\Throwable $th) { Log::error('Upload image failed: ' . $th->getMessage()); return null; } } public function imageName($size, $fileType) { $purpose = date('Y-m-d') . '-' . \Str::random(12) . '-' . $size . '.' . $fileType; return str_replace(" ", "-", $purpose); } public function imageSaveToStorage($convertMethod, $imageUrl, $requestImage, $original, $height = '', $width = '') { $image = Image::make($convertMethod($requestImage)); if ($original === 'original') { $image->save($imageUrl, 90); } else { $image->resize($width, $height, function ($constraint) { $constraint->aspectRatio(); })->save($imageUrl, 90); } return true; } public function deleteImage($old_upload_id, $slug = 'update') { try { $upload = Upload::find($old_upload_id); if ($upload) { foreach (['original', 'image_one', 'image_two', 'image_three'] as $field) { if ($upload->$field && File::exists(public_path($upload->$field))) { unlink(public_path($upload->$field)); } } if ($slug === 'delete') { $upload->delete(); } } return true; } catch (\Throwable $th) { Log::error('Delete image failed: ' . $th->getMessage()); return false; } } }
Editor is loading...
Leave a Comment