PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > PHP教程 > 正文

    php大文件切片上传

    作者:admin来源:网络浏览:时间:2020-10-21 13:01:20我要评论
    导读:在上传文件过程中,如果文件过大第一占用服务器带宽,所以为了减少网络代码,提高用户体验度在客户端【浏览器】首先将资源【图片,资源】使...
    在上传文件过程中,如果文件过大第一占用服务器带宽,所以为了减少网络代码,提高用户体验度在客户端【浏览器】首先将资源【图片,资源】使用分页原理将资源切分,然后上传至服务器,最后服务器进行合并,形成图片.

    1.前端代码

    1. <!DOCTYPE html> 
    2. <html lang="en"
    3. <head> 
    4.    <meta charset="UTF-8"
    5.    <title>Document</title> 
    6.    <script src="./jquery.js"></script> 
    7. </head> 
    8. <body> 
    9.    <div id="per_box" style="width: 350px; height: 15px; background-color: #cccccc"
    10.    <div id="per" style="width: 0%; height: 100%; background-color: #007CD5"></div> 
    11.    <span id="per_num"></span> 
    12. </div> 
    13. <br /> 
    14. <input type="file" name="file_tag" id="file_tag"
    15. <input type="button" value="上传" id = "upload_btn"
    16. </body> 
    17. </html> 
    18.  
    19. <script> 
    20.     $(document).ready(function(){ 
    21.         $("#upload_btn").click(function(){ 
    22.             var files = $("#file_tag")[0].files[0]; 
    23.             if(!files){ 
    24.                 $("#file_tag").trigger("click"); 
    25.             } 
    26.             var chunk;//当前页面数值 
    27.             upload(files); 
    28.         }); 
    29.  
    30.  
    31.         function upload(file){ 
    32.             var tmpName = file.size+"_chunk"
    33.             var every_size=1024*1024;//每一页传递的数据 
    34.             var chunks = Math.ceil(file.size /every_size);//一共多少页 
    35.             chunk = window.localStorage.getItem(tmpName) || 1; 
    36.             chunk = parseInt(chunk); 
    37.  
    38.             var offset = (chunk-1) * every_size;//开始位置 
    39.             var limit = chunk * every_size > file.size  ? file.size : chunk * every_size; 
    40.             var page = file.slice(offset,limit);//获取一页的数据 
    41.  
    42.             var form = new FormData();//这是一个表单的对象 
    43.               form.append("page",page);//类似于一个input框 
    44.               form.append("filename",file.name);//文件名字 
    45.  
    46.               var per = (limit/file.size * 100).toFixed(1); 
    47.  
    48.               $.ajax({ 
    49.                   type : "post"
    50.                   data:form, 
    51.                   processData : false,//取消服务器对上传文件线程控制 
    52.                  contentType : false,//取消服务器设置上传文件的类型 
    53.                  cache : false,//不需要服务器设置缓存 
    54.                  dataType : 'json'
    55.                  url : "/upload.php"
    56.                  success:function(msg){ 
    57.                      if(chunk >= chunks ){ 
    58.                          $("#per").css({width:"100%"}); 
    59.                           $("#per_num").text(100+"%"); 
    60.                      }else
    61.                          chunk++; 
    62.                          window.localStorage.setItem(tmpName,chunk); 
    63.                          $("#per").css({width:per+"%"}); 
    64.                           $("#per_num").text(per+"%"); 
    65.                          upload(file); 
    66.                      } 
    67.                  } 
    68.               }); 
    69.         } 
    70.     }); 
    71. </script> 

    2.后端代码

    1. $baseFileName = $_REQUEST['filename']; 
    2.     $ext = explode(".",$baseFileName)[1]; 
    3.     $fileName=explode(".",$baseFileName)[0]; 
    4.  
    5.     $arr = $_FILES['page']; 
    6.     $tmpName = $arr['tmp_name']; 
    7.     $content = file_get_contents($tmpName); 
    8.     $fileName = "./{$fileName}.{$ext}"
    9.     file_put_contents($fileName,$content,FILE_APPEND); 
    10.  
    11.     $arr = array( 
    12.             'error'=>0, 
    13.         ); 
    14.     echo json_encode($arr); 

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-10-6392-1.html
    相关热词搜索: php大文件上传