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下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
php生成excel列序号代码实例
Dec 24 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP 类与构造函数解析
Feb 06 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 PHP
PHP强制转化的形式整理
May 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
smarty的保留变量问题
2008/10/23 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
js删除数组中某几项的方法总结
2019/01/16 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python实现连接mongodb的方法
2015/05/08 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python处理Excel文件实例代码
2017/06/20 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
浅析Python3 pip换源问题
2020/01/06 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
优秀毕业生自我鉴定
2014/01/19 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript