2017-01-18 4 views
0

Итак, вчера я попытался сделать upload file function, так как когда пользователь делает свои товары, он также может загрузить изображение.Загрузите изображение и создайте его миниатюру Laravel 5.2

Но изображение было слишком большим, когда я повторял элементы, поэтому я решил использовать пакет вмешательства для изменения размера изображения, а также создать уменьшенное изображение.

Я сделал функцию, но ее частично работал.

if($file = $request->hasFile('image')) { 
     $file = $request->file('image'); 
     $extension = $file->getClientOriginalName(); 
     $username = Auth::user()->username; 
     $destinationPath = public_path('/uploads/products/' . $username); 
     $thumb = Image::make($file->getRealPath())->resize(100, 100, function ($constraint) { 
      $constraint->aspectRatio(); //maintain image ratio 
     }); 
     $thumb->save($destinationPath.'/thumb_'.$extension); 
     $destinationPath = public_path('/uploads/products/' . $username); 
     $file->move($destinationPath, $extension); 
     $product['imagePath'] = '/uploads/products/'. $username . '/' . $extension; 
     $product['thumbnail'] = '/uploads/products/'. $username . '/thumb_' . $extension; 
    } 

Я сделал это так, другой пользователь создаст другой файл в /uploads/products.

Также я загружаю исходное изображение и изменение размера, чтобы у меня было: picture.jpg и thumb_picture.jpg.

Когда пользовательский файл не создается (от имени пользователя) Я получаю эту ошибку:

Can't write image data to path (C:\xampp\htdocs\shop\public/uploads/products/book/thumb_Jellyfish.jpg)

Когда я комментирую 6,7,8 линии, функция работает, но она будет загружать только оригинал как предполагалось. Если я удалю комментарий, миниатюра тоже будет работать!

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

Любые идеи? Все будет оценено!

ответ

1

Для тех, интересно, как это исправить или сделать что-то подобное, я просто нашел решение:

if($file = $request->hasFile('image')) { 
     $file = $request->file('image'); 
     $extension = $file->getClientOriginalName(); 
     $username = Auth::user()->username; 
     $thumb = Image::make($file->getRealPath())->resize(100, 100, function ($constraint) { 
      $constraint->aspectRatio(); //maintain image ratio 
     }); 
     $destinationPath = public_path('/uploads/products/' . $username); 
     $file->move($destinationPath, $extension); 
     $thumb->save($destinationPath.'/thumb_'.$extension); 
     $product['imagePath'] = '/uploads/products/'. $username . '/' . $extension; 
     $product['thumbnail'] = '/uploads/products/'. $username . '/thumb_' . $extension; 
    } 

Так что этот кусок кода делает динамическую папку (я выбрал имя пользователя, прошедшего проверку подлинности пользователя) внутри /uploads/products/ , В этой папке она загружает изображение, а также создает измененный размер для использования эскизов. Кроме того, когда он создает миниатюру, он удерживает соотношение исходного изображения, поэтому он не теряет пропорции

 Смежные вопросы

  • Нет связанных вопросов^_^