• 接收前端传过来的base64编码后的字符串, 如果是json字符串, 那么PHP使用file_get_contents('php://input'); 来接收. 本次这里是以post传参的形式传base64字符串.

    $photo = \Yii::$app->request->post('photo', '');    //yii接收,photo变量存储的即base64字符串
  • 设置base64转成图片后要保存的文件名 以及 路径
    $filename = date('YmdHis').rand(1111,9999).'.png';
    $path = \Yii::$app->basePath.'/web/temp';
    if(!is_dir($path)){
    mkdir($path, 0777, 'true');
    }
    $imagePath = $path.'/'.$filename;  //文件的完整路径(本地的)
  • 判断是否有逗号, 如果有就截取后半部分
    if(strstr($photo, ',')){
    $photo = explode(',', $photo);
    $photo = $photo[1];
    }
  • base64生成图片
    $r = file_put_contents($imagePath, base64_decode($photo));   //$r接收的是返回的字节数, 至此本地成功生成图片
  • 接下来是将本地图片保存至oss上, 并删除本地图片
    $photo_url = $this->uploadImg($imagePath);  //调用上传oss方法
    //删掉本地图片
    unlink($imagePath);

    上传oss方法如下(需要下载ossSDK并引入,此处省略)

    public $access_key = '你的access_key';
    public $secret_key = '你的secret_key';
    public $domain = 'http://oss-cn-shenzhen.aliyuncs.com'; //选距离最近的域名
    public $bucket = '你的bucket';
    //$localdir是图片的本地路径, 也就是$imagePath
    public function uploadImg($localdir='')
    {
    include \Yii::$app->basePath.'extensions/aliyun-oss-php-sdk-2.2.4/autoload.php'; //将ossSDK包放在extensions目录下, 然后引入autoload.php, 还有命名空间. 即可使用.
    //把文件上传到oss上
    try{
    $object = md5(time().uniqid()).'.png';
    $ossClient = new OssClient($this->access_key, $this->secret_key, $this->domain);
    $exist = $ossClient->doesObjectExist($this->bucket, $object);
    if(!$exist){
    $ossClient->uploadFile($this->bucket, $object, $localdir);
    } $domain = explode('//', $this->domain);
    $url = 'http://'.$this->bucket.'.'.$domain[1].'/'.$object; //拼接访问路径
    // $data = [
    // 'status' => 0,
    // 'msg' => 'success',
    // 'url' => $url,
    // ];
    return $url;
    } catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
    }
    }
  • 附上base64的原理讲解:https://blog.csdn.net/wo541075754/article/details/81734770

PHP处理base64编码字符串的更多相关文章

  1. 图片和base64编码字符串 互相转换,图片和byte数组互相转换

    图片和base64编码字符串 互相转换 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; ...

  2. Base64编码字符串时数据量明显变大

    那就是当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据量明显变大 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需 ...

  3. 将图片转化为base64编码字符串

    pom依赖 <dependency> <groupId>org.ops4j.base</groupId> <artifactId>ops4j-base- ...

  4. CKEditor图片上传问题(默认安装情况下编辑器无法处理图片),通过Base64编码字符串解决

    准备做一个文章内容网站,网页编辑器采用CKEditor,第一次用,默认安装情况下,图片无法插入,提示没有定义上传适配器(adapter),错误码提示如下: 根据提示,在官网看到有两种途径:一使用CKE ...

  5. .NET实现字符串base64编码

    using System; using System.Text; using System.IO; using System.Security; using System.Security.Crypt ...

  6. js将图片转为base64编码,以字符串传到后台存入数据库

    (前台在中approve_edit.html中,后台不变) 链接参考:http://www.cnblogs.com/Strom-HYL/p/6782176.html 该链接文中并没有用到easyUI的 ...

  7. URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  8. BASE64编码和解码(VC源代码) 并 内存加载 CImage 图像

      BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本.完整的BASE64定义可见 RFC1421和 RFC2045.编码后的数据比原始数据略长,为原来的4/3.在电子 ...

  9. 获取图片base64编码的几种方法

    前文中我们聊了 Data URI 和 base64编码,稍微回顾下.base64编码 是将数据用 64 个可打印的字符进行编码的方式,任何数据底层实现都是二进制,所以都可以进行 base64编码,ba ...

随机推荐

  1. IDEA插件之FindBugs

    1.是个啥? Findbugs,它是一个静态分析工具,用来查找Java代码中的程序错误.它使用静态分析来识别Java程序中上百种不同类型的潜在错误. 2.安装 File -> Settings ...

  2. C++中如何设计一个类只能在堆或者栈上创建对象,面试题

    设计一个类,该类只能在堆上创建对象 将类的构造函数私有,拷贝构造声明成私有.防止别人调用拷贝在栈上生成对象. 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建 注意 在堆和栈上创建对象都会调 ...

  3. 基于TCP 协议的socket 简单通信

    DNS 服务器:域名解析 socket 套接字 : ​ socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...

  4. linux下nginx搭建

    1.准备 1-1.安装 make,zlib,gcc-c++,openssl yum -y install make zlib zlib-devel gcc-c++ libtool  openssl o ...

  5. Devexpress WinForm GridControl实现单元格可编辑状态更改

    之前做项目的时候,需要实现这样的功能.在gridcontrol中,根据是否修改(checkbox)列的选中和未选中状态来联动另外一列的编辑状态.实现如下: private void gridView1 ...

  6. 《精通Windows API-函数、接口、编程实例》——第4章文件系统

    第4章文件系统 4.2 磁盘和驱动器管理 文件系统的基本概念:包括磁盘分区,卷,目录,文件对象,文件句柄,文件映射1.磁盘分区:物理磁盘,逻辑磁盘2.卷:也称逻辑驱动器,是NTFS,FAT32等文件系 ...

  7. CSP-S2019题解

    格雷码 €€£:我不抄自己辣!JOJO! 这题比那个SCOI的炒鸡格雷码好多了,甚至告诉你构造方法,所以... void wk(uLL kk) { int j=0; for(uLL i=n-1;~i; ...

  8. 基于AccessToken方式实现API设计

    一.举例说明: 需求: A.B机构需要调用X服务器的接口,那么X服务器就需要提供开放的外网访问接口. 分析: 1.开放平台提供者X,为每一个合作机构提供对应的appid.app_secret. 2.a ...

  9. C++ STL 之 multimap案例之员工分组

    #include <iostream> #include <vector> #include <map> #include <string> #incl ...

  10. SQL学习——LIKE运算符

    原文链接 LIKE 作用 在WHERE子句中使用LIKE运算符来搜索列中的指定模式. 有两个通配符与LIKE运算符一起使用: % - 百分号表示零个,一个或多个字符 _ - 下划线表示单个字符 注意: ...