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 相关文章推荐
在字符串中把网址改成超级链接
Oct 09 PHP
PHP时间戳使用实例代码
Jun 07 PHP
php 文件上传实例代码
Apr 19 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
PHP判断密码强度的方法详解
May 26 PHP
使用PHP json_decode可能遇到的坑与解决方法
Aug 03 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 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
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
vue.js项目打包上线的图文教程
2017/11/16 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
C#面试题
2016/05/06 面试题
2015年监理个人工作总结
2015/05/23 职场文书
大学军训口号大全
2015/12/24 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
Python list列表删除元素的4种方法
2021/11/01 Python