laravel 存储base64格式图片

2020-01-08 23:49:13

参考地址 laravel 存储base64格式图片

目录


 

回到顶部

>  一、总结(点击显示或隐藏总结内容)

一句话总结:

用正则替换base64图片编码的编码头即可
存储图片的话,用laravel可以用Storage的put方法,原生php可以用file_put_contents方法

复制代码

替换编码头preg_match('/^(data:\s*image\/(\w+);base64,)/',$base64_img,$res);$base64_img=base64_decode(str_replace($res[1],'', $base64_img));

存储图片$ans=Storage::disk('user_img')->put($new_file, $base64_img);
或if (file_put_contents($new_file,base64_decode(str_replace($res[1],'', $imgBase64))))

复制代码

 

 

回到顶部

二、laravel存储64位图片实例

复制代码

 1     //1、上传base64位的图片:用户的头像 2     public function uploader_img_base64(Request $request){ 3  4         //用户id 5         $u_id=Auth::guard('user')->user()->id; 6         if(!$u_id){ 7             return ['valid' => 0, 'message' => '用户信息过期,请刷新页面重试!!']; 8         } 9 10         $base64_img=$request->input('base64_img');11         $base64_img=urldecode($base64_img);12         //获取原图片的相对路径13         $old_user_img_url=$request->input('old_user_img_url');14         $position=stripos($old_user_img_url,'user_img/');15         if(strlen($old_user_img_url)>$position+9)16         $old_user_img_url_relative=substr($old_user_img_url,$position+9);17 18         preg_match('/^(data:\s*image\/(\w+);base64,)/',$base64_img,$res);19 20 21         if (isset($res[2])) {22             //获取图片类型23             $type = $res[2];24 25             //图片保存路径26             $new_file = ''.date('Ym',time()).'/';27             //$new_file = "attachment/user_img/".date('Ymd',time()).'/';28 29             //图片名字30             $new_file = $new_file.str_random(10).mt_rand(10000,99999).'.'.$type;31             $base64_img=base64_decode(str_replace($res[1],'', $base64_img));32             //dd($base64_img);33             $ans=Storage::disk('user_img')->put($new_file, $base64_img);34 35             if ($ans) {36                 $ans2=Storage::disk('user_img')->delete($old_user_img_url_relative.'');37                 //dd($ans2);38                 //$img_url=asset('attachment/user_img/'.$new_file);39                 $img_url='attachment/user_img/'.$new_file;40                 //修改用户的头像41                 User::where('id',$u_id)->update(['picture'=>$img_url]);42 43                 //unlink($old_user_img_url_relative.'');44                 return ['valid' => 1, 'message' => $img_url];45             } else {46                 return ['valid' => 0, 'message' => '上传失败请重试!'];47             }48 49         }else{50             return ['valid' => 0, 'message' => '上传失败请重试!!'];51         }52 53     }

复制代码

 

 

 

回到顶部

三、laravel 存储前端上传base64图片

转自或参考:laravel 存储前端上传base64图片
https://blog.csdn.net/qq_23953793/article/details/103064293

 

用postman模拟前端Android 上传图文信息

 

 


PHP laravel后端代码

public function store(Request $request)
    {

        $moment = new Moment();
        $moment->title = $request->get('title');
        $moment->date = $request->get('date');
        $moment->description = $request->get('description');
        $moment->user_id = $request->get('user_id');
        $image = $request->get('image_base64');  // your base64 encoded
        $image = str_replace('data:image/png;base64,', '', $image);
        $image = str_replace(' ', '+', $image);

        $imagePath= 'images/'.str_random(10) . '.png';
        Storage::disk('public')->put($imagePath, base64_decode($image));

        $moment->image_base64 = $imagePath;
        $moment->save();

        return response()->json([
            'code' => 1,
            'message' => 'success',
            'date' => ''
        ]);


    }

数据库:
在这里插入图片描述
目录存储:
在这里插入图片描述

 

 

回到顶部

四、php将base64字符串转换为图片

转自或参考:php将base64字符串转换为图片
https://www.cnblogs.com/yexiaocangji/p/7690688.html

一些插件产生的图片数据是base64格式的,比如cropper,当我们要上传到服务器想要保存为图片文件的时候,可以用以下方法

 

                //获取图片base64字符串
                $imgBase64 = $_REQUEST['img'];        if (preg_match('/^(data:\s*image\/(\w+);base64,)/',$imgBase64,$res)) {             //获取图片类型   
                        $type = $res[2];            //图片保存路径
            $new_file = "static/images/".date('Ymd',time()).'/';            if (!file_exists($new_file)) {

                mkdir($new_file,0755,true);
            }            //图片名字
            $new_file = $new_file.time().'.'.$type;            if (file_put_contents($new_file,base64_decode(str_replace($res[1],'', $imgBase64)))) {

                $msg['msg'] = 'ok';                echo json_encode($msg);
            } else {

                $msg['msg'] = 'no';                echo json_encode($msg);
            }
        }

 


  • 2019-02-24 09:47:09

    解决Node.js的命令行输出中文乱码问题(也适用于Electron)

    ​一般我们的js文件都是试用utf8编码保存的,但是中文windows的命令行一般默认使用cp936编码(就是gbk),这样我们用js代码 console.log('中文');输出日志的时候,会发现输出的是乱码。 网上有提供一些解决方案,典型的就是用iconv或iconv-lite,把这些中文字符串先转成gbk再输出。 但是这个方案我试了多次,在win10的命令行下,utf8的字符串是成功转成了gbk字符串了(通过打印Buffer可以见到),但是输出还是乱码。

  • 2019-02-25 10:05:41

    Android Socket连接(模拟心跳包,断线重连,发送数据等)

    因为是要保证全局只能有一个连接,而且我们还需要在不同的Activity中发指令,因此肯定不能在需要发指令的界面中都去连接socket,这样一来不好管理,性能也不好,重复代码也会比较多,所以想了一下还是把socket放到service中比较好,发指令功能都放在service中即可。

  • 2019-02-28 15:54:24

    HTTP协议缓存策略深入详解之ETAG妙用

      HTTP协议规格说明定义ETag为“被请求变量的实体值” 。另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。

  • 2019-02-28 16:46:26

    android获取视频、图片时添加防盗链

    使用HTTP协议时,可以利用头信息中的Referer做防盗链。 我们在一些网站的网页里访问图片的时候,在图片本站是可以正常看到的,但在外头就不能看到了,这是因为在http的header信息中的referer元素。

  • 2019-03-02 11:29:17

    MySQL学习之索引顺序

    这个问题比较简单,MySQL本身会对条件和索引进行判断,这样写可以用到索引,没有问题。