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与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
谈谈 PHP7新增功能
Dec 16 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
PHP身份证校验码计算方法
Aug 10 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PHP支付宝当面付2.0代码
Dec 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 zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
js微信支付实现代码
2016/12/22 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
Python搜索引擎实现原理和方法
2017/11/27 Python
Python登录系统界面实现详解
2019/06/25 Python
用python批量下载apk
2020/12/29 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
大学生实习期自我评价范文
2013/10/03 职场文书
十佳教师事迹材料
2014/01/11 职场文书
思想品德课教学反思
2014/02/10 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
产品售后服务承诺书
2014/05/21 职场文书
父亲节活动策划方案
2014/08/24 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python