首页 > 解决方案 > 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.

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

标签: laravelimageresizeintervention

解决方案


save()在方法中添加文件名

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

这里有一些来自干预站点文档的例子

// 打开一个图像文件并调整其大小 $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');


推荐阅读