PHP+Ajax异步带进度条上传文件实例


Posted in PHP onNovember 01, 2016

最近项目中要做一个带进度条的上传文件的功能,学习了Ajax,使用起来比较方便,将几个方法实现就行。

前端引入文件

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>

Ajax进度条异步处理

<script type="text/javascript">
$(function () {
   $("#myupload").ajaxForm({
     dataType:'json',
     beforeSend:function(){ 
         $(".progress").show();
     },
     uploadProgress:function(event,position,total,percentComplete){
         var percentVal = percentComplete + '%';
         $(".progress-bar").width(percentComplete + '%');
         $(".progress-bar").html(percentVal);
         $(".sr-only").html(percentComplete + '%');
     },
     success:function(data){
         $(".progress").hide();
      
         if(data.error == "empty_name"){
             alert("文件上传非法,上传失败!");
             exit();
         };
         if(data.error == "large"){
             alert("图片上传不能大于2M,上传失败!");
             exit();
         };
  
 /*alert(data.error);*/
         if(data.error == "format"){
             alert("图片格式错误,上传失败");
             //alert(data.type);
             exit();
         };
  
         //alert("上传成功!");
         //files.html("<b>"+data.name+"("+data.size+"k)</b> <span class='delimg' rel='"+data.pic+"'>删除</span>");
         $(".files").html("文件名: "+data.name+"<span class='delimg' rel='"+data.pic+"'>  del  </span>大小:"+data.size);
         var img = "http://www.sandleft.com/test/input/upload/files/"+data.pic;
         $(".showimg").html("<img src='"+img+"'>");
         alert("上传成功!");
     },
     error:function(){
         alert("图片上传失败");
     }
      
   });
   $(".progress").hide();
});
 
</script>

前端上传HTML

<div class="uk-container uk-container-center">
 
        <div class="pk-system-messages"></div>
 
        <h1 class="uk-h2 uk-text-center" style="margin-top:-100px;">文件上传</h1>
        <div class="pk-system-messages"></div>
 
         <div class="container-main">
          <h1>Ajax Image Uploader</h1>
          <p>A simple tutorial to explain image uploading using jquery ajax and php</p>
  
           <form id='myupload' action='new_upload.php' method='post' enctype='multipart/form-data'>
            <label for="file">Filename:</label>
           <input type="file" name="mypic" id="file"><br>
           <input type="submit" name="upload" class="btn btn-success" value="upload">
          </form>
  
            <div class="progress">
             <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
              <span class="sr-only">0% Complete</span>
           </div>
           </div>
          <div class="files"></div>
          <div class="showimg"></div>
         </div>
         
       </div>

PHP文件上传类

<?php
class upload{
 
  protected $file_path = "files"; //当前files存储文件夹
  #protected $file_size = 1024000;
  protected $file_size = 5120000; //5M 用户上传
  //检测文件是否为空
 public function check_file($get_file)
 {
    if (empty($get_file))
    {
     $type = "check_file";
       $arr = array('error'=>'empty_name','type'=>$type);
       echo json_encode($arr);
       exit();
    }
  return true;
}
 
 
 //检测文件类型
 public function check_type($get_type)
 {
   if (( $get_type == ".docx" ) || ( $get_type == ".doc" )) {
      #$types = $get_type;
   }else{
      $type = "check_type";
      $arr = array('error'=>'format','type'=>$type);
        echo json_encode($arr);
        exit(); 
 
   }
  return true;
 }
 
 //检测文件大小
 public function check_size($get_file)
 {
   if ( $get_file != "" ) {
      if ( $get_file > $this->file_size ) {
          $arr = array('error'=>'large');
          echo json_encode($arr);
          exit();
      }
  }else{
    return false;
    exit();
  }
 return true;
 }
  
//文件保存
 public function save_file($file_type,$file_tmp_name)
 {
  $rand = rand(1000, 9999);
  $pics = date("YmdHis") . $rand . $file_type;
  $path = $this->file_path."/".$pics;
  $result = move_uploaded_file($file_tmp_name, $path);
  if($result){
    return $pics;
  }else{
    return false;
    exit();
  }
  #return $pics;
 }
 
}
PHP文件上传处理
<?php
include("upload.class.php");
$up_obj = new upload();
 
$get_fileName = $_FILES['mypic']['name'];
$get_fileSize = $_FILES['mypic']['size'];
$get_TmpFiles = $_FILES['mypic']['tmp_name'];
 
$get_fileType = strstr($get_fileName, '.');
 
$check_result = $up_obj->check_file($get_fileName);
 
if($check_result){
 
  //检查文件类型
  $result_type = $up_obj->check_type($get_fileType);
 
  //检查文件大小
  if($result_type){
 
    $result_size = $up_obj->check_size($get_fileSize);
 
    if($result_size){
      //文件上传保存  
      $pics = $up_obj->save_file($get_fileType,$get_TmpFiles);   
      $size = round($get_fileSize/1024,2);
          $arr = array(
            'name' => $get_fileName,
             'pic' => $pics,
             'size'=> $size,
             'error' => 2
         );
 
       //检查文件上传状态
       if($pics){
         echo json_encode($arr);
         /*
         执行上传完成逻辑.....
         */
      }   
    }
  }
 
}

文件上传效果如图:

PHP+Ajax异步带进度条上传文件实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 PHP
php 解析非标准json、非规范json
Apr 01 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 #PHP
PHP用户验证和标签推荐的简单使用
Oct 31 #PHP
PHP实现小偷程序实例
Oct 31 #PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 #PHP
利用php做服务器和web前端的界面进行交互
Oct 31 #PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 #PHP
PDO的安全处理与事物处理方法
Oct 31 #PHP
You might like
用PHP书写安全的脚本代码
2012/02/05 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
完善的jquery处理机制
2016/02/21 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python多继承顺序实例分析
2018/05/26 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
python+flask实现API的方法
2018/11/21 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
大学新生入学教育方案
2014/05/16 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
德生2P3收音机开箱评测
2022/04/30 无线电