当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现本地图片转base64格式并上传

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-11 09:03:52 浏览: 评论:0 

我们在开发系统时,处理图片上传是不可避免的,例如使用thinkphp的肯定很熟悉import("@.ORG.UploadFile");的上传方式,今天我们来讲一个使用html5 base64上传图片的方法。

主要是用到html5 FileReader的接口,既然是html5的,所支持的浏览器我就不多说啦

可以大概的讲一下思路,其实也挺简单。选择了图片之后,js会先把已选的图片转化为base64格式,然后通过ajax上传到服务器端,服务器端再转化为图片,进行储存的一个过程。

咱们先看看前端的代码。

html部分

<input type="file" id="imagesfile">

js部分

  1. $("#imagesfile").change(function (){ 
  2.             
  3.    var file = this.files[0]; 
  4.      
  5.    //用size属性判断文件大小不能超过5M ,前端直接判断的好处,免去服务器的压力。 
  6.    if( file.size > 5*1024*1024 ){  
  7.         alert( "你上传的文件太大了!" )  
  8.    } 
  9.      
  10.    //好东西来了 
  11.    var reader=new FileReader(); 
  12.     reader.onload = function(){ 
  13.         
  14.       // 通过 reader.result 来访问生成的 base64 DataURL 
  15.       var base64 = reader.result; 
  16.         
  17.       //打印到控制台,按F12查看 
  18.       console.log(base64); 
  19.         
  20.       //上传图片 
  21.       base64_uploading(base64); 
  22.         
  23.     } 
  24.      reader.readAsDataURL(file); 
  25.           
  26. }); 
  27.  
  28. //AJAX上传base64 
  29. function base64_uploading(base64Data){ 
  30.   $.ajax({ 
  31.      type: 'POST'
  32.      url: "上传接口路径"
  33.      data: {  
  34.       'base64': base64Data 
  35.      }, 
  36.      dataType: 'json'
  37.      timeout: 50000, 
  38.      success: function(data){ 
  39.           
  40.         console.log(data); 
  41.           
  42.      }, 
  43.      complete:function() {}, 
  44.      error: function(xhr, type){ 
  45.          alert('上传超时啦,再试试'); 
  46.            
  47.      } 
  48.    }); 

其实前端的代码也并不复杂,主要是使用了new FileReader();的接口来转化图片,new FileReader();还有其他的接口,想了解更多的接口使用的童鞋,自行谷歌搜索new FileReader();。

接下来,那就是服务器端的代码了,上面的demo,是用thinkphp为框架编写的,但其他框架也基本通用的。

  1. function base64imgsave($img){ 
  2.     
  3.   //文件夹日期 
  4.   $ymd = date("Ymd"); 
  5.     
  6.    //图片路径地址   
  7.   $basedir = 'upload/base64/'.$ymd.''
  8.   $fullpath = $basedir
  9.   if(!is_dir($fullpath)){ 
  10.     mkdir($fullpath,0777,true); 
  11.   } 
  12.   $types = emptyempty($types)? array('jpg''gif''png''jpeg'):$types
  13.     
  14.   $img = str_replace(array('_','-'), array('/','+'), $img); 
  15.     
  16.   $b64img = substr($img, 0,100); 
  17.     
  18.   if(preg_match('/^(data:\s*image\/(\w+);base64,)/'$b64img$matches)){ 
  19.       
  20.   $type = $matches[2]; 
  21.   if(!in_array($type$types)){ 
  22.     return array('status'=>1,'info'=>'图片格式不正确,只支持 jpg、gif、png、jpeg哦!','url'=>''); 
  23.   } 
  24.   $img = str_replace($matches[1], ''$img); 
  25.   $img = base64_decode($img); 
  26.   $photo = '/'.md5(date('YmdHis').rand(1000, 9999)).'.'.$type
  27.   file_put_contents($fullpath.$photo$img); 
  28.       
  29.     $ary['status'] = 1; 
  30.     $ary['info'] = '保存图片成功'
  31.     $ary['url'] = $basedir.$photo
  32.       
  33.     return $ary
  34.     
  35.   } 
  36.     
  37.     $ary['status'] = 0; 
  38.     $ary['info'] = '请选择要上传的图片'
  39.       
  40.     return $ary

以上就是PHP代码,原理也很简单,拿到接口上传的base64,然后再转为图片再储存。

使用的是thinkphp 3.2,无需数据库,PHP环境直接运行即可。

php目录路径为:

‪Application\Home\Controller\Base64Controller.class.php

html目录路径为:

Application\Home\View\Base64\imagesupload.html

Tags: PHP本地图片转base64

分享到: