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多个版本的分析解释
Jul 21 PHP
PHP面向对象概念
Nov 06 PHP
PHP缓存技术的多种方法小结
Aug 14 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
php实现四舍五入的方法小结
Mar 03 PHP
PHP date函数常用时间处理方法
May 11 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
laravel5.5添加echarts实现画图功能的方法
Oct 09 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
使用Apache的rewrite技术
2006/06/22 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
Ext 今日学习总结
2010/09/19 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
微信跳一跳自动运行python脚本
2018/01/08 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Django forms组件的使用教程
2018/10/08 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
python 循环数据赋值实例
2019/12/02 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
付款证明格式范文
2015/06/19 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
详解Python中的进程和线程
2021/06/23 Python
Python jiaba库的使用详解
2021/11/23 Python