Intervention \ Image \ Exception \ NotSupportedException Формат кодирования (tmp) не поддерживается

Я использую пакет Intervention с Laravel 5.6, проблема, которую я получаю всякий раз, когда я загружаю файл, который мне был представлен с ошибкой Формат кодирования (tmp) не поддерживается. У меня также включено расширение gdd2. Это код, который я использовал.

public function store(Request $request)
    {
        $this->validate($request , [
            'name'          => 'required|unique:categories',
            'description'   =>  'max:355',
            'image'         =>  'required|image|mimes:jpeg,bmp,png,jpg'
        ]);

        // Get Form Image
        $image = $request->file('image');
        $slug = str_slug($request->name);
        if (isset($image))
        {
            $currentDate = Carbon::now()->toDateString();
            $imageName = $slug.'-'.$currentDate.'-'.uniqid().'.'.$image->getClientOriginalExtension();
            // Check if Category Dir exists
            if (!Storage::disk('public')->exists('category'))
            {
                Storage::disk('public')->makeDirectory('category');
            }
            // Resize image for category and upload
            $categoryImage = Image::make($image)->resize(1600,479)->save();
            Storage::disk('public')->put('category/'.$imageName, $categoryImage);

            // Check if Category Slider Dir exists
            if (!Storage::disk('public')->exists('category/slider'))
            {
                Storage::disk('public')->makeDirectory('category/slider');
            }

            // Resize image for category slider and upload
            $categorySlider = Image::make($image)->resize(500,333)->save();
            Storage::disk('public')->put('category/slider/'.$imageName, $categorySlider);

        }
        else
        {
            $imageName = 'default.png';
        }

        $category = new Category();
        $category->name = $request->name;
        $category->slug = $slug;
        $category->description = $request->description;
        $category->image = $imageName;

        $category->save();
        Toastr::success('Category Saved Successfully','Success');
        return redirect()->route('admin.category.index');
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
11 129
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Для метода Intervention image спасти() требуется имя файла, чтобы он знал, в каком формате файла (jpg, png и т. д.) Сохранить ваше изображение.

Причина, по которой вы получаете сообщение об ошибке, заключается в том, что он не знает, в какой кодировке сохранить временный объект изображения (tmp).

Вот пример

->save('my-image.jpg', 90)

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

http://image.intervention.io/api/save

Вам не нужно использовать функцию save () в классе Intervention\Image, поскольку вы сохраняете файл на свой общедоступный диск через фасад Storage.

Просто замените строку

$categoryImage = Image::make($image)->resize(1600,479)->save();

с участием

$categoryImage = Image::make($image)->resize(1600,479)->stream();

чтобы избежать необходимости сохранять изображение во временной папке с расширением .tmp. Laravel Storage Facade будет обрабатывать поток, созданный Intervention\Image, и сохранять файл на общедоступном диске.

Где-то видел это, и у меня это сработало.

$image->save('foo' . $img->getClientOriginalExtension());

Метод Laravel Intervention image save () требует имени файла, чтобы он знал, в каком формате файла (jpg, png и т. д.) Сохранить ваше изображение.

 $categoryImage = Image::make($image)->resize(1600,479)->save( $imageName,90);

Я решил это

Trimming my file path, i was using this script inside laravel Artisan Console.

$img->save(trim('public/uploads/images/thumbnails/'.$subFolder.'/'.$filename));

Скорее вы используете поток, который работает без ошибок

$categoryImage = Image::make($image)->resize(1600,479)->save(); 
  1. $ categoryImage = Image :: make ($ image) -> изменить размер (1600 479) -> сохранить (); Storage :: disk ('public') -> put ('category /'.$ imageName, $ categoryImage);

изменить на

Image::make($image)->resize(1600, 479)->save(storage_path('app/public/category').'/'.$imagename);
$categorySlider = Image::make($image)->resize(500,333)->save();
Storage::disk('public')->put('category/slider/'.$imageName, $categorySlider);

изменить на

Image::make($image)->resize(500, 333)->save(storage_path('app/public/category/slider/') .$imagename);

Другие вопросы по теме