PHP实现本地图片转base64格式并上传


Posted in PHP onMay 29, 2020

我们在开发系统时,处理图片上传是不可避免的,例如使用thinkphp的肯定很熟悉import("@.ORG.UploadFile");的上传方式,今天我们来讲一个使用html5 base64上传图片的方法。

主要是用到html5 FileReader的接口,既然是html5的,所支持的浏览器我就不多说啦

可以大概的讲一下思路,其实也挺简单。选择了图片之后,js会先把已选的图片转化为base64格式,然后通过ajax上传到服务器端,服务器端再转化为图片,进行储存的一个过程。

咱们先看看前端的代码。

html部分

<input type="file" id="imagesfile">

js部分

$("#imagesfile").change(function (){
          
   var file = this.files[0];
   
   //用size属性判断文件大小不能超过5M ,前端直接判断的好处,免去服务器的压力。
   if( file.size > 5*1024*1024 ){ 
        alert( "你上传的文件太大了!" ) 
   }
   
   //好东西来了
   var reader=new FileReader();
    reader.onload = function(){
      
      // 通过 reader.result 来访问生成的 base64 DataURL
      var base64 = reader.result;
      
      //打印到控制台,按F12查看
      console.log(base64);
      
      //上传图片
      base64_uploading(base64);
      
    }
     reader.readAsDataURL(file);
        
});

//AJAX上传base64
function base64_uploading(base64Data){
  $.ajax({
     type: 'POST',
     url: "上传接口路径",
     data: { 
      'base64': base64Data
     },
     dataType: 'json',
     timeout: 50000,
     success: function(data){
        
        console.log(data);
        
     },
     complete:function() {},
     error: function(xhr, type){
         alert('上传超时啦,再试试');
         
     }
   });
}

其实前端的代码也并不复杂,主要是使用了new FileReader();的接口来转化图片,new FileReader();还有其他的接口,想了解更多的接口使用的童鞋,自行谷歌搜索new FileReader();。

接下来,那就是服务器端的代码了,上面的demo,是用thinkphp为框架编写的,但其他框架也基本通用的。

function base64imgsave($img){
    
    //文件夹日期
    $ymd = date("Ymd");
    
     //图片路径地址  
    $basedir = 'upload/base64/'.$ymd.'';
    $fullpath = $basedir;
    if(!is_dir($fullpath)){
      mkdir($fullpath,0777,true);
    }
    $types = empty($types)? array('jpg', 'gif', 'png', 'jpeg'):$types;
    
    $img = str_replace(array('_','-'), array('/','+'), $img);
    
    $b64img = substr($img, 0,100);
    
    if(preg_match('/^(data:\s*image\/(\w+);base64,)/', $b64img, $matches)){
      
    $type = $matches[2];
    if(!in_array($type, $types)){
      return array('status'=>1,'info'=>'图片格式不正确,只支持 jpg、gif、png、jpeg哦!','url'=>'');
    }
    $img = str_replace($matches[1], '', $img);
    $img = base64_decode($img);
    $photo = '/'.md5(date('YmdHis').rand(1000, 9999)).'.'.$type;
    file_put_contents($fullpath.$photo, $img);
      
      $ary['status'] = 1;
      $ary['info'] = '保存图片成功';
      $ary['url'] = $basedir.$photo;
      
      return $ary;
    
    }
    
      $ary['status'] = 0;
      $ary['info'] = '请选择要上传的图片';
      
      return $ary;
  }

以上就是PHP代码,原理也很简单,拿到接口上传的base64,然后再转为图片再储存。

使用的是thinkphp 3.2,无需数据库,PHP环境直接运行即可。

php目录路径为:

‪Application\Home\Controller\Base64Controller.class.php

html目录路径为:

Application\Home\View\Base64\imagesupload.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP编码规范-php coding standard
Mar 16 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
drupal 代码实现URL重写
May 04 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP四大安全策略
Mar 12 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
May 29 #PHP
php生成短网址/短链接原理和用法实例分析
May 29 #PHP
PHP const定义常量及global定义全局常量实例解析
May 28 #PHP
PHP实现获取文件mime类型多种方法解析
May 28 #PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 #PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 #PHP
php与阿里云短信接口接入操作案例分析
May 27 #PHP
You might like
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
Yii全局函数用法示例
2017/01/22 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
python3实现高效的端口扫描
2019/08/31 Python
softmax及python实现过程解析
2019/09/30 Python
如何基于Python批量下载音乐
2019/11/11 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
2013届毕业生求职信范文
2013/11/20 职场文书
职业生涯规划书范文
2014/03/10 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
如何利用python实现Simhash算法
2022/06/28 Python