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 相关文章推荐
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
一个PHP并发访问实例代码
Sep 06 PHP
自定义php类(查找/修改)xml文档
Mar 26 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
ThinkPHP路由机制简介
Mar 23 PHP
php批量删除操作代码分享
Feb 26 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
实例讲解php实现多线程
Jan 27 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 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代码
2013/03/24 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
详解Node 定时器
2018/02/26 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
Python中方法链的使用方法
2016/02/23 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Python post请求实现代码实例
2020/02/28 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
国际语言毕业生求职信
2014/07/08 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
大学生创业计划书
2014/08/14 职场文书
2014年民政工作总结
2014/11/26 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
2019军训心得体会
2019/06/27 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技