首页 > Web开发 > 详细

php接收并存储base64位字符串图片

时间:2020-04-13 00:16:32      阅读:75      评论:0      收藏:0      [点我收藏+]

代码主体

我后台的框架使用的是laravel,所以这里使用了laravel自带的存储类
接收并存储代码

    public function paste(Request $request){
        // 存储的文件
        $base64Str = $request->input(‘base64‘);

        // 正则匹配数据
        preg_match(‘/^(data:\s*image\/(\w+);base64,)/‘, $base64Str, $res);
        // 解析真正的图片字符串
        $file = base64_decode(Str::after($base64Str, $res[1]));

        // 存储的文件,指定了当前磁盘的根目录
        $filePath = $this->fileName(‘/editormd/‘.now()->year, $res[2]);

        // 存储在当前磁盘中不存在的文件
        Storage::disk(‘public‘)->put($filePath, $file);

        return response()->json([‘success‘=>1, ‘url‘=>‘/storage‘.$filePath]);
    }

步骤:

  1. 先从字符串提取出图片的格式。
  2. 再对剩下的字符串中的图片实体进行base64_decode解码
  3. 其中Str::after($base64Str, $res[1])是获取除去data:image/png;base64,后的字符串,像这样iVBORw0KGgoAAAANSUhEUgAA...
  4. Storage::disk是laravel内置的存储方法,你可以使用file_put_contents代替。
  5. $this->fileName是生成随机的文件名,详情见附录。

附录:

// 使用随机字符串生成文件名
    private function fileName($dir, $ext){
        // 循环50次检查文件,知道发现不存在的文件为止
        $start = 0;
        do{
            $fileName = $dir.‘/‘.Str::random(40).‘.‘.$ext;
            if(!Storage::disk(‘public‘)->exists($fileName)){
                break;
            }else{
                $start ++;
            }
        }while($start <= 50);

        return $fileName;
    }

php接收并存储base64位字符串图片

原文:https://www.cnblogs.com/hxsen/p/12688527.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!