Обработка загрузки файлов и изменение размера изображения с помощью Unisharp Laravel

#php #laravel #file-upload #unisharp-file-manager

#php #laravel #загрузка файла #unisharp-файловый менеджер

Вопрос:

Я использую Unisharp для загрузки файлов для моего проекта laravel. Пакет работает должным образом. Теперь я хочу, чтобы у меня был массив типа файла, например:

 [name] => MyFile.jpg      
[type] => image/jpeg
[tmp_name] => /tmp/php/php6hst32
[error] => UPLOAD_ERR_OK
[size] => 98174
  

URL-адреса изображения в Unisharp filemanager. Предположим, что если я выберу http://example.com/storage/files/42/lace-up.png из Unisharp filemanager, я хочу получить массив файлов, как указано выше.

Я хочу иметь это, потому что я хочу соответствующим образом изменять размер изображений и сохранять их в разных папках.

Я создал следующую функцию для загрузки и изменения размера изображений:

 function uploadImage($file, $dir, $thumb_dimension=null){

  $path = public_path().'/uploads/'.$dir;

  if(!File::exists($path)){
      File::makeDirectory($path, 0777, true, true);
  }

  $file_name = ucfirst($dir).'-'.date('Ymdhis').rand(0,999).".".$file->getClientOriginalExtension();
  $success = $file->move($path, $file_name);
  if($success){
      $file_path = $path.'/'.$file_name;
      if($thumb_dimension){
          list($width,$height) = explode('x',$thumb_dimension);
          Image::make($file_path)->resize($width,$height, function($const){
              $const->aspectRatio();
          })->save($path.'/Thumb-'.$file_name);
      }
      return $file_name;
  } else {
      return null;
  }
}
  

Возможно ли это?

Редактировать

Я хочу использовать следующую функцию после получения подробной информации об изображении.

 function uploadImage($file, $dir, $thumb_dimension=null){

  $path = public_path().'/uploads/'.$dir;

  if(!File::exists($path)){
      File::makeDirectory($path, 0777, true, true);
  }
  
  $file_name = ucfirst($dir).'-'.date('Ymdhis').rand(0,999).".".$file->getClientOriginalExtension();
  $success = $file->move($path, $file_name);
  if($success){
      $file_path = $path.'/'.$file_name;
      if($thumb_dimension){
          list($width,$height) = explode('x',$thumb_dimension);
          Image::make($file_path)->resize($width,$height, function($const){
              $const->aspectRatio();
          })->save($path.'/Thumb-'.$file_name);
      }
      return $file_name;
  } else {
      return null;
  }
}
  

Комментарии:

1. итак, в основном вы хотите извлечь подробную информацию о файле, прикрепленном по этой ссылке

2. @bhucho Да, потому что я хочу сохранить изображения в другую папку.

Ответ №1:

Если вы хотите просто извлечь изображение из ссылки, вам просто нужно создать небольшую функцию для его обработки.

 public function getImageViaLink($link){
    try {
        $info = pathinfo($link);
        $image = file_get_contents($link);
        $arr['basename'] = $info['basename'];
        $file_info = new finfo(FILEINFO_MIME_TYPE);
        $mime_type = $file_info->buffer($image);
        $arr['size'] = strlen($image);
        $arr['mime_type'] = $mime_type;
        $path = public_path() .'/'. $arr['basename'];
        
        // You can save contents of link in your file directly or store it in tmp
        file_put_contents($path, $image);
        $arr['path'] = $path;
        return $arr;
    }
    catch (Exception $e) {
        echo $e->getMessage();
    }
        
}
  

Что касается случая error в вашем массиве, вы в основном хотите, чтобы ошибки при загрузке файлов, но это может быть легко обработано с помощью исключения.

В качестве примечания, если у вас есть переменная запроса на момент сохранения изображения с помощью unisharp, вы можете получить доступ ко всем этим деталям в $request.

 // dd() of a request containing image file.
array:2 [▼
  "_token" => "e7v7ZxaKoIFGIYOscCAFwsoB8olw8lrNjwx8Azyi"
  "attachment_1_0" => UploadedFile {#229 ▼
    -test: false
    -originalName: "db.png"
    -mimeType: "image/png"
    -size: 86110
    -error: 0
     path: "C:xampptmp"
     filename: "phpF4F4.tmp"
     basename: "phpF4F4.tmp"
     pathname: "C:xampptmpphpF4F4.tmp"
     extension: "tmp"
     realPath: "C:xampptmpphpF4F4.tmp" 
    
 ... and many more
  

Вы можете создать прослушиватель, который всякий раз, когда изображение сохраняется, вы можете создать другую копию со всеми деталями, чтобы сохранить ее в другом месте.

Комментарии:

1. Спасибо, Bhuco. Я не загружаю с Unisharp. Я пытаюсь получить доступ к изображениям, которые уже были загружены с Unisharp.

2. итак, вы можете получить доступ к деталям изображения, хранящимся в ссылке, используя getImageViaLink, в чем проблема