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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
我常用的几个类
Oct 09 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
php去除HTML标签实例
Nov 06 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
php数组删除元素示例
Mar 21 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
Oct 16 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 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脚本的10个技巧(3)
2006/10/09 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
jQuery的12招常用技巧分享
2011/08/08 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
Python列表元素常见操作简单示例
2019/10/25 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
Python3.9新特性详解
2020/10/10 Python
HTML5标签大全
2016/11/23 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
大学生村官承诺书
2014/03/28 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
部队个人年终总结
2015/03/02 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书