tp5防止黑客入侵(非常重要)以及对base64的处理

当上传的图片时我们首先要验证图片的类型,如果时base64时就用下面这个进行判断,
function is_base64_encoded($data)
{
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $data, $matches)) {
        return TRUE;
    } else {
        return FALSE;
    }
}

当上传的图片为其他的时候,判断是否为png,jpg等图片下面判断如下

/**
 * 上传图片
 * @param Request $request
 * @return \think\response\Json
 */
public function uploadImage(Request $request)
{
    $folder=$request->param('folder');//指定文件夹
    $file=$request->file('file');
    if(!$file) return json(['code'=>400,'msg'=>'请选择文件']);
    if($folder){
        $upload=$file->rule('month')->validate(array('ext'=>'jpg,png,jpeg,bmp,gif'))->move(UPLOAD_PATH.$folder);
    }else{
        $upload=$file->validate(array('ext'=>'jpg,png,jpeg,bmp,gif'))->move(UPLOAD_PATH);
    }
    if($upload){
        $saveName=$upload->getSaveName();
        $img=($folder ? ($folder.DS) : '').$saveName;

        return json(['code'=>200,'data'=>$img]);
    }else{
        return json(['code'=>400,'msg'=>$upload->getError()]);
    }
}

validate验证上传图片的类型

 

下面顺便讲一下对base64的处理

上传的base64处理

/*
     * 生成图片
     * */
function image($image)
{
    $imageName = "20188_" . date("His", time()) . "_" . rand(1111, 9999) . '.png';
    if (strstr($image, ",")) {
        $image = explode(',', $image);
        $image = $image[1];
    }
    $path = "./" . 'uploads/Ver/' . date("Ymd", time());
    if (!is_dir($path)) { //判断目录是否存在 不存在就创建
        mkdir($path, 0777, true);
    }
    $imageSrc = $path . "/" . $imageName; //图片名字
    $r = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
    if (!$r) {
        return 1;
    } else {
        return $imageSrc;
    }
}

 

还有一种情况:当提交后可以编辑时,base64就会出问题

1.第一次上传base64我将图片处理后保存到数据库,当第二次时,我会将数据库中的连接返回给前端(此时是链接)

这样就会出现问题,因为再次提交没有改变的图片其实是url链接,发送给我就会再次处理(对base64的处理),此时出错

解决方案:

每次点击上传图片就去请求处理base64的方法,然后我返回的都是url,再次编辑也是一样的,就不会出现以上问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值