问题描述
这就是我尝试使用 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));
文档中的一些示例
// 打开一个图像文件并调整其大小 $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');