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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
深入PHP数据缓存的使用说明
May 10 PHP
使用php计算排列组合的方法
Nov 13 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 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 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
php封装的smarty类完整实例
2016/10/19 PHP
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
js实现表格筛选功能
2017/01/18 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
详解vue-cli3使用
2018/08/14 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
Python Socket编程入门教程
2014/07/11 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
Python实现的读写json文件功能示例
2018/06/05 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
自荐信怎么写好
2013/11/11 职场文书
工作自我评价分享
2013/12/01 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
员工辞职信范文大全
2015/05/12 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android