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

代码主体

我后台的框架使用的是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;
    }
posted @ 2019-05-20 11:23  houxin  阅读(420)  评论(0编辑  收藏  举报