php+html5实现无刷新图片上传教程


Posted in PHP onJanuary 22, 2016

本篇向大家介绍一种全新的上传图片的方式,利用html5的FileReader读取图片文件,然后将数据传输到服务器再使用PHP进行处理。实现过程如下(带图片预览功能)
前端html代码 upload,html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>上传</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<style>
.upload{
  width:300px;
  height:200px;
  position:relative;
}
.upload input[type='file']{
  position:absolute;
  width:70px;
  top:0;
  left:0;
  z-index:10;
  opacity:0;
  filter:alpha(opacity=0);
}
.upload input.selbutton{
  width:70px;
  height:30px;
  background:#cf001b;
  color:#FFF;
  font-size:14px;
  position:absolute;
  top:0;left:0;
  z-index:9;
  border:none;
  cursor:pointer;
}
.upload input.upbutton{
  width:70px;
  height:30px;
  background:#cf001b;
  color:#FFF;
  font-size:14px;
  position:absolute;
  top:50px;left:0;
  z-index:10;
  border:none;
  cursor:pointer;
}
</style>
</head>
<body>
<div class='upload'>
  <input type="file" name="file" />
  <input type="button" name="selbutton" class="selbutton" value="选择文件" />
  <input type="button" name="upbutton" class="upbutton" value="上传" />
</div>
<div class='previews'>
  <img src="#" class="image_thumb" alt="图片预览"/>
</div>
</body>
</html>

样式如下图

php+html5实现无刷新图片上传教程

接下来是js代码

<script type="text/javascript">
  $(".upbutton").click(function(){
    //定义允许上传的图片格式 在前台就可以直接判断,不合法的格式将不会上传
   var filetype = ['jpg','jpeg','png','gif'];
   if($('.image').get(0).files){
      fi = $('.image').get(0).files[0]; //得到文件信息
      //判断文件格式是否是图片 如果不是图片则返回false
      var fname = fi.name.split('.');
      if(filetype.indexOf(fname[1].toLowerCase()) == -1){
        alert('文件格式不支持');
        return ;
      }
      //实例化h5的fileReader
      var fr = new FileReader();
      fr.readAsDataURL(fi); //以base64编码格式读取图片文件
      fr.onload = function(frev){
        pic = frev.target.result; //得到结果数据
      //开始上传之前,预览图片
 $('.image_thumb').attr('src',pic);
//使用ajax 利用post方式提交数据
        $.post(
          'handle.php',
          {
             message:pic,
            filename:fname[0],
            filetype:fname[1],
            filesize:fi.size
          },
          function(data){
            data = eval('('+data+')');
            if(data.code == 1 || data.code == 2){
              console.log('上传失败')
            }else if(data.code == 0){
              console.log('上传成功')
            }
          }
        );
      }
    }
  })
</script>

接下来是PHP处理代码  handle.php

$imgtype = array(
  'gif'=>'gif',
  'png'=>'png',
  'jpg'=>'jpeg',
  'jpeg'=>'jpeg'
); //图片类型在传输过程中对应的头信息
$message = $_POST['message']; //接收以base64编码的图片数据
$filename = $_POST['filename']; //接收文件名称
$ftype = $_POST['filetype']; //接收文件类型
//首先将头信息去掉,然后解码剩余的base64编码的数据
$message = base64_decode(substr($message,strlen('data:image/'.$imgtype[strtolower($ftype)].';base64,')));
$filename = $filename.".".$ftype;
$furl = "D:/now/";
//开始写文件
$file = fopen($furl.$filename,"w");
if(fwrite($file,$message) === false){
  echo json_encode(array('code'=>1,'con'=>'failed'));
  exit;
}
echo json_encode(array('code'=>0,'con'=>$filename));

选择文件然后点击上传的效果如下图

php+html5实现无刷新图片上传教程

以上就是整个图片上传的代码。当然对于PHP的部分还有很多可以优化的地方,比如文件名部分,可以重命名,以保证相同文件名上传以后的文件名是不同的等等。这种上传方式我也是刚开始使用,当初是受Node.js做上传的的启发,然后尝试着应用于PHP,没想到还真能上传成功。

希望大家也可以按照此方法实现图片上传。

PHP 相关文章推荐
关于PHP中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
一个查看session内容的函数
Oct 09 PHP
PHP Document 代码注释规范
Apr 13 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
Jsonp劫持学习
Apr 01 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 #PHP
PHP中的session安全吗?
Jan 22 #PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 #PHP
PHP连接MYSQL数据库实例代码
Jan 20 #PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 #PHP
Twig模板引擎用法入门教程
Jan 20 #PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 #PHP
You might like
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php实现小程序支付完整版
2018/10/09 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
javascript中常用编程知识
2013/04/08 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
优秀研究生自我鉴定
2013/12/04 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
教师绩效工资方案
2014/02/01 职场文书
保护环境演讲稿
2014/05/10 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
大学学生会竞选稿
2015/11/19 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL