干预\ Image \ Exception \ NotSupportedException不支持编码格式(tmp)

时间:2018-04-27 12:02:40

标签: laravel intervention

我正在使用Laravel 5.6的Intervention软件包,这是我上传文件时遇到的问题我遇到错误编码格式(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');
    }

7 个答案:

答案 0 :(得分:1)

干预图像 save()方法需要一个文件名,以便它知道保存图像的文件格式(jpg,png等)。

您收到错误的原因是它不知道用什么编码来保存临时图像对象 (tmp)

这是一个例子

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

还有一个可选的第二个参数来控制质量输出。以上输出质量为90%。

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

答案 1 :(得分:1)

当您通过Intervention\Image Facade将文件保存到公共光盘时,您不需要使用Storage课程中的save()功能。

只需更换行

即可

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

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

以避免必须将图像存储到.tmp扩展名下的临时文件夹中。 Laravel Storage Facade将处理Intervention\Image创建的流,并将文件存储到公共磁盘。

答案 2 :(得分:0)

在某个地方看到它对我有用

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

答案 3 :(得分:0)

Laravel Intervention图像save()方法需要一个文件名,因此它知道将图像保存在哪种文件格式(jpg,png等)。

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

答案 4 :(得分:0)

我已经通过

解决了这个问题
  

修剪   我的文件路径是在laravel Artisan Console 中使用的。

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

答案 5 :(得分:0)

相反,您可以使用流来正常工作

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

答案 6 :(得分:0)

  1. $ categoryImage = Image :: make($ image)-> resize(1600,479)-> save(); 存储:: 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);