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数据库抽象层 PDO
May 07 PHP
PHP修改session_id示例代码
Jan 08 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
Nov 03 PHP
PHP多进程编程实例详解
Jul 19 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 PHP
php数组遍历类与用法示例
May 24 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之第九天
2006/10/09 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
JavaScript 密码强度判断代码
2009/09/05 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
js实现简单的打印表格
2020/01/15 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python条件和循环的使用方法
2013/11/01 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python heapq使用详解及实例代码
2017/01/25 Python
详解python eval函数的妙用
2017/11/16 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
项目合作计划书
2014/01/09 职场文书
个人收入证明范本
2014/01/12 职场文书
厂长岗位职责
2014/02/19 职场文书
法人身份证明书
2014/10/08 职场文书
实用求职信模板范文
2019/05/13 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android