Laravel中如何将Intervention流图片直接保存至public/piku文件夹
解决方案
要直接将Intervention处理后的图片流保存到项目根目录的public/piku文件夹,有两种可行方案:
方案一:使用原生文件系统函数(推荐,无需配置)
直接利用Laravel的public_path()辅助函数定位到项目根的public目录,配合file_put_contents写入图片流,同时确保目标目录存在:
$ext = "jpg"; $imageConvert = \Image::make($image->getRealPath())->stream($ext, 60); $img = rand(10, 100) . '_piku.' . $ext; // 生成目标目录绝对路径 $targetDir = public_path('piku'); // 递归创建目录(如果不存在) if (!is_dir($targetDir)) { mkdir($targetDir, 0755, true); } // 将图片流写入目标文件 file_put_contents($targetDir . '/' . $img, $imageConvert);
说明:
public_path('piku')会直接返回项目根目录下public/piku的绝对路径,无需依赖Storage磁盘映射。mkdir的第三个参数true确保递归创建多级目录,避免因父目录不存在导致写入失败。file_put_contents支持直接写入Intervention返回的StreamInterface对象,无需额外转换。
方案二:配置新的Storage磁盘
如果偏好使用Laravel的Storage系统,可以在config/filesystems.php中添加一个指向项目根public目录的磁盘:
'disks' => [ // ... 保留原有磁盘配置 'public_root' => [ 'driver' => 'local', 'root' => public_path(), 'url' => env('APP_URL') . '/', 'visibility' => 'public', ], ],
之后就可以通过这个新磁盘写入文件:
$ext = "jpg"; $imageConvert = \Image::make($image->getRealPath())->stream($ext, 60); $img = rand(10, 100) . '_piku.' . $ext; \Storage::disk('public_root')->put('piku/' . $img, $imageConvert);
内容的提问来源于stack exchange,提问作者Loveyatri
相关产品推荐
相关产品推荐

