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服务器页面间跳转实现方法
Aug 02 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
php防注入及开发安全详细解析
Aug 09 PHP
codeigniter框架批量插入数据
Jan 09 PHP
php去除数组中重复数据
Nov 18 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
python实现图片彩色转化为素描
2019/01/15 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
详解Python中的文件操作
2021/01/14 Python
关于圣诞节的广播稿
2014/01/26 职场文书
教职工代表大会主持词
2014/04/01 职场文书
求职信标题怎么写
2014/05/26 职场文书
机关保密承诺书
2014/06/03 职场文书
国际贸易实训报告
2014/11/05 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js