Laravel 8 图像干预:无法将图像数据写入路径

问题描述

这就是我尝试使用 image intervention 包的方式:

public function saveImage(string $path,$image)
{
        $file = $image;

        $filename = Str::random(20) . $file->getClientOriginalName();

        $imgResize = Image::make($image);
        $imgResize->heighten(300);

        //dd(is_writable(storage_path('app/public/'.$path)));

        $imgResize->save(storage_path('app/public/'.$path));


        return $destination_path = Storage::disk('local')->put('/'.$path,$image);    
}

图像保存成功,无需使用图像干预。当我尝试 save() 时,它会抛出这个错误

Intervention\Image\Exception\NotWritableException: Can't write image data to path

我已经更改了文件夹的权限,但仍然无法正常工作。

知道是什么原因造成的吗?

编辑:

我之前做过 PHP artisan storage:link 这就是为什么它不使用图像干预就可以工作的原因。

我做了dd(storage_path('app/public/'.$path));,结果是在同一个文件夹中成功保存了普通图像。

我还检查了 is_writable 是否为 true

出于测试目的,我已将权限更改为 777

我不知道还能做些什么来完成这项工作。

解决方法

save()方法中添加文件名

$imgResize->save(storage_path('app/public/'.$path.'/'.$filename));

这里是 intervention site

文档中的一些示例

// 打开一个图像文件并调整其大小 $img = Image::make('public/foo.jpg')->resize(300,200);

// 将文件保存为中等质量的 jpg $img->save('public/bar.jpg',60);

// 以默认质量保存与 jpg 相同的文件 $img->save('public/baz.jpg');

//将文件保存为png格式 $img->save('public/bar.png');

//保存第三个参数定义的图片jpg格式 $img->save('public/foo',80,'jpg');