原理:什么是base64图片上传,不过就是在客户端把图片用base64加密变成了字符串而已;我们在服务器端只需要去除开头的标志,把剩余的进行base64解码就得到了原来的图片;保存到指定位置即可。
/**
* base64图片上传文件
* @param string $base64Img base64格式的图片字符串
*
* @return bool|string
*/
function base64ImgUpload($base64Img)
{
if (empty($base64Img)) return false;
if (preg_match('/^(data:s*image/(w+);base64,)/', $base64Img, $result)) {
// 获取后缀名称
$ext = $result[2];
// 设置保存的图片名称
$name = md5('johnxu_' . mt_rand(1000, 9999) . time() . uniqid()) . ".{$ext}";
// 设置图片保存位置
$path = './uploads/' . date('Ymd') . '/' . $name;
// 检查上传目录是否存在,不存在创建
if (!is_dir(dirname($path))) {
mkdirs(dirname($path));
}
// 去除base64头并解码
if (file_put_contents($path, base64_decode(str_replace($result[1], '', $base64Img)))) {
return $path;
} else {
return false;
}
} else {
return false;
}
}
/**
* 创建目录
* @param string $path
* @return bool
*/
function mkdirs($path)
{
if (!is_dir($path)) {
if (!mkdirs(dirname($path))) {
return false;
}
if (!mkdir($path, 0777)) {
return false;
}
}
return true;
}
参考文章:https://www.toutiao.com/a6499781084840985101/