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 smarty 二级分类代码和模版循环例子
Jun 01 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
PHP的password_hash()使用实例
Mar 17 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
PHP的命令行命令使用指南
Aug 18 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
php读取本地json文件的实例
2018/03/07 PHP
PHP微商城开源代码实例
2019/03/27 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
python直接访问私有属性的简单方法
2016/07/25 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python解析多帧dicom数据详解
2020/01/13 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
软件工程师面试题
2012/06/25 面试题
自我反省检讨书
2014/01/23 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
太太口服液广告词
2014/03/20 职场文书
中学生自我评价范文
2015/03/03 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS