PHP 简单 base64传图片 (base64格式)

   base64传图片 (base64格式)
	$avatar1 = Attachment::base64Image($avatar);
	protected static $max_size = 2048000;// 图片上传最大尺寸
    protected static $extension = ['jpg','jpeg','gif','bmp','png'];// 图片格式限制


    /**
     * @param string    $stream       base64图片流
     * @param   string  $sub_dir      上传upload子目录
     * @return bool|string
     */
    public static function base64Image($stream, $sub_dir='attachment', $auth = null)
    {
        $server = request()->server();
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $stream,$result)){
            $type = $result[2];//图片后缀
            if(!in_array($type, self::$extension)){
                $auth && $auth->setError('上传文件格式不正确');
                return false;
            }
            $date = date('Ymd', time());
            $dir_name = $_SERVER['DOCUMENT_ROOT']."/uploads/$sub_dir/".$date.'/';
            if (!file_exists($dir_name)) {
                //检查是否有该文件夹,如果没有就创建,并给予最高权限
                $mk = mkdir($dir_name, 0700, true);
                if($mk === false){
                    $auth && $auth->setError('上传失败,没有权限');
                    return false;
                }
            }

            $filename = mt_rand(1000,9999) . '_' . uniqid() . ".{$type}"; //文件名
            $new_file = $dir_name . $filename;
            //写入操作
            $file_stream = base64_decode(str_replace($result[1], '', $stream));
            if(strlen($file_stream)/1024 > 4096){
                $auth && $auth->setError('文件太大,超过4M');
                return false;
            }
            if(file_put_contents($new_file, base64_decode(str_replace($result[1], '', $stream))) === false) {
                $auth && $auth->setError('服务器响应失败');
                return false;
            }else{
                return $server['REQUEST_SCHEME'] . '://' . $server['SERVER_NAME']. "/uploads/$sub_dir/".$date.'/' . $filename;
            }
        }else{
            $auth && $auth->setError('文件检测不合法');
            return false;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值