#laravel-7 #intervention
#laravel-7 #вмешательство
Вопрос:
Пока я загружаю изображение со следующим кодом ниже:
if($request->hasFile('image')) {
$path = $request->image->getClientOriginalName();
$name = time() . '-' . $path;
$news->image = $request->file('image')->storeAs('public/news', $name);
}
Он проверяет изображение файла, возвращает ему исходное имя, создает формат времени, прикрепленный к имени файла изображения, и загружает в хранилище в нужную папку.
Как я могу изменить размер этого изображения перед загрузкой в каталог файлов?
Я читал о вмешательстве, которое включено в Laravel 7, но может ли кто-нибудь помочь мне добиться этого с помощью вмешательства и объединить с моей логикой загрузки изображения?
Я пробовал так:
use InterventionImageImageManagerStatic as Image; // use Intervention
if($request->hasFile('image')) {
$path = $request->image->getClientOriginalName();
$resize = Image::make($path)->fit(300);
$name = time() . '-' . $resize;
$news->image = $request->file('image')->storeAs('public/news', $name);
}
но я получаю Image source not readable
сообщение об ошибке.
Ответ №1:
Очевидно, что вмешательство не может прочитать ваше изображение, проверьте путь, который вы ему указали.
dd($path);
В моем случае я действую следующим образом:
$img = Image::make('storage/'.$banner)->resize(800, 250);
Затем, чтобы изменить размер изображения перед его загрузкой, вы можете сделать это следующим образом:
//$image is the temporary path of your image (/tmp/something)
$image = $request->image;
//Create a Image object with the tmp path
$resized_img = Image::make($image);
//Do what you want and save your modified image on the same temporary path as the original image.
$resized_img->fit(300)->save($image);
//Upload your image on your bucket and get the final path of your image
$path = $image->storeAs('public/news', $name)
Комментарии:
1. Привет. Моя конфигурация по умолчанию (без каких-либо измененных каталогов). Я все еще получаю ту же ошибку, даже когда использую ваш пример. Я добавил вручную полный путь, но он по-прежнему имеет ту же ошибку.
2. Спасибо за ваше предложение, я нашел решение проблемы, и вы можете увидеть мой ответ.
Ответ №2:
Я нашел решение после долгого тестирования. Ниже приведен мой код:
if($request->hasFile('image')) {
$image = $request->file('image');
$imageName = $image->getClientOriginalName();
$fileName = 'public/news/' . time() . '-' . $imageName;
Image::make($image)->resize(600,300)->save(storage_path('app/' . $fileName));
$news->image = $fileName;
}
Основной проблемой был путь, а также мне не нужно использовать функцию storeAs (), просто используя функции вмешательства…вот и все.
Этот подход намного более гибкий, и очень легко реализовать дополнительные функции из замечательной библиотеки вмешательств.