Laravel 8 图像干预:无法将图像数据写入路径
Laravel 8 Image intervention: Can't write image data to path
这就是我尝试使用 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));
文档中的一些示例
// open and resize an image file
$img = Image::make('public/foo.jpg')->resize(300, 200);
// save file as jpg with medium quality
$img->save('public/bar.jpg', 60);
// save the same file as jpg with default quality
$img->save('public/baz.jpg');
// save the file in png format
$img->save('public/bar.png');
// save the image jpg format defined by third parameter
$img->save('public/foo', 80, 'jpg');
保存方法实际上需要绝对路径或相对于使用该方法的文件的路径。所以给一个文件名,所有父文件夹都已经创建。使用 storage_path()
、public_path()
或 base_path()
(或 laravel 提供的其他方法)。或来自核心 php.
的任何方法
这就是我尝试使用 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));
文档中的一些示例
// open and resize an image file $img = Image::make('public/foo.jpg')->resize(300, 200);
// save file as jpg with medium quality $img->save('public/bar.jpg', 60);
// save the same file as jpg with default quality $img->save('public/baz.jpg');
// save the file in png format $img->save('public/bar.png');
// save the image jpg format defined by third parameter $img->save('public/foo', 80, 'jpg');
保存方法实际上需要绝对路径或相对于使用该方法的文件的路径。所以给一个文件名,所有父文件夹都已经创建。使用 storage_path()
、public_path()
或 base_path()
(或 laravel 提供的其他方法)。或来自核心 php.