Laravel 存储 base64 格式图片

直接用正则替换 base64 图片的编码头即可

1
2
3
4
5
6
7
8
public function update(Request $request) {
$coverImg = $request->get('cover_img');
preg_match('/^(data:\s*image\/(\w+);base64,)/', $coverImg, $res);
$coverImg = base64_decode(str_replace($res[1], '', $coverImg));
$imagePath = str_random(10) . uniqid() . '.png'; // 生成图片名
Storage::disk('uploads')->put($imagePath, $coverImg); // 保存图片
return env('APP_URL') . '/uploads/' . $imagePath; // 拼接完成路径
}

有几个点要注意:

1.上面代码中的 Storage::disk('uploads') 是我在 config/filesystems.php 文件中定义的,如果直接把代码复制过去执行是不行的

config/filesystems.php

1
2
3
4
5
6
7
8
9
10
'disks' => [
...
// 新建一个本地端uploads空间(目录) 用于存储上传的文件
'uploads' => [
'driver' => 'local',
// 文件将上传到public/uploads目录 如果需要浏览器直接访问 请设置成这个
'root' => public_path('uploads'),
]
...
],

2.部署到生产环境后需要给权限 否则无法保存图片