Untitled
unknown
plain_text
a year ago
8.2 kB
38
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