PHP7中文手册2018 带注释 最新chm版
1. form表单选择图片 ——> 通过php上传存储在服务器端 ——> 服务器返回图片的url给前端页面 ——> 通过url前台展示图片(预览)
2. 如果预览之后不满意,就按照上面的流程重新上传修改预览
二、html5出现之后使用javascript实现FileReade接口
说明:在html5范围之内,通过FileReade接口可以直接先预览图片,然后通过php上传存储在服务器
FileReader接口原理: 通过FileReader,可以异步地将本地图片文件加载到本地内存,然后赋予某个javascript变量。然后调用FileReader的readAsDataURL方法,通过将图片数据读取成Data URL的方法,将图片展示出来。
html5中:
1. 通过一个file input选择一个图片文件例如:<input type="file" id="file_input" />
javascript中:
1. 获取file对象var file = this.files[0];
2. 判读文件类型是否图片file.type
3. 实例化FileReader var reader = new FileReader();
4. readAsDataURL方法读取图像文件 reader.readerAsDataURL(file);
5. 通过this.result输出到显示位置:result.innerHTML = '<img src="'+this.result+'" alt=""/>'
上面把大概的流程梳理了一下让大家有个基本概念,具体使用时可能还要配合一些js事件比如:onload事件等
三、实例
下面代码已经测试没问题,如果自己使用出现问题就注意一下路劲等参数
测试环境:goole chrome、微信、android浏览器、iphone浏览器
html内容:
<!DOCTYPE HTML PUBLIC> <html> <head> <meta charset="utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <title>使用html5 FileReader获取图片,并异步上传到服务器(not iframe)</title> <style type="text/css"> body{margin: 0px; background:#f2f2f0;} p{margin:0px;} .title{color:#FFFF00; background:#000000; text-align:center; font-size:24px; line-height:50px; font-weight:bold;} .file{position:absolute; width:100%; font-size:90px;} .filebtn{display:block; position:relative; height:110px; color:#FFFFFF; background:#06980e; font-size:48px; line-height:110px; text-align:center; cursor:pointer; border: 3px solid #cccccc;} .filebtn:hover{background:#04bc0d;} .showimg{margin:10px auto 10px auto; text-align:center;} </style> <script type="text/javascript"> window.onload = function(){ // 选择图片 document.getElementById('img').onchange = function(){ var img = event.target.files[0]; // 判断是否图片 if(!img){ return ; } // 判断图片格式 if(!(img.type.indexOf('image')==0 && img.type && /\.(?:jpg|png|gif)$/.test(img.name)) ){ alert('图片只能是jpg,gif,png'); return ; } var reader = new FileReader(); reader.readAsDataURL(img); reader.onload = function(e){ // reader onload start // ajax 上传图片 $.post("server.php", { img: e.target.result},function(ret){ if(ret.img!=''){ alert('upload success'); $('#showimg').html('<img src="' + ret.img + '">'); }else{ alert('upload fail'); } },'json'); } // reader onload end } } </script> </head> <body> <p class="title">使用html5 FileReader获取图片,并异步上传到服务器(not iframe)</p> <p><input type="file" class="file" id="img"><label class="filebtn" for="img" title="JPG,GIF,PNG">请选择图片</label></p> <p class="showimg" id="showimg"></p> </body> </html>
php页面代码:
<?php $img = isset($_POST['img'])? $_POST['img'] : ''; // 获取图片 list($type, $data) = explode(',', $img); // 判断类型 if(strstr($type,'image/jpeg')!==''){ $ext = '.jpg'; }elseif(strstr($type,'image/gif')!==''){ $ext = '.gif'; }elseif(strstr($type,'image/png')!==''){ $ext = '.png'; } // 生成的文件名 $photo = time().$ext; // 生成文件 file_put_contents($photo, base64_decode($data), true); // 返回 header('content-type:application/json;charset=utf-8'); $ret = array('img'=>$photo); echo json_encode($ret); ?>