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 16 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
微信支付的开发流程详解
Sep 13 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
yii2 上传图片的示例代码
Nov 02 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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车辆违章查询数据示例
2016/10/14 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
11款基于Javascript的文件管理器
2009/10/25 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python批量更改文件名的实现方法
2017/10/29 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
python反扒机制的5种解决方法
2021/02/06 Python
应届大学生的推荐信
2013/11/20 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
鸡毛信观后感
2015/06/11 职场文书
离婚财产分割协议书
2015/08/11 职场文书
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers
Go语言基础map用法及示例详解
2021/11/17 Golang
移除Selenium中window.navigator.webdriver值
2022/06/10 Python