<cite id="soqa1"><track id="soqa1"></track></cite>

<em id="soqa1"></em>
<sup id="soqa1"><rt id="soqa1"></rt></sup>
    1. <cite id="soqa1"><track id="soqa1"></track></cite><cite id="soqa1"></cite>
      av高清,丝袜性亚洲,天堂…中文在线最新版在线,AV在线不卡观看免费观看,精品日韩精品国产另类专区,亚洲色大成网站WWW永久男同,韩国无码AV片午夜福利,亚洲AV秘?片一区二区三区水牛

      虛擬主機 如何上傳大于100M的文件 php網站程序

      問題

      1. 虛擬主機上傳文件大小限制100m,

      2. 有時會遇到非常大的文件上傳,上傳過程中耗時非常久,

      3. 可能服務器的限制設置了上傳文件尺寸,返回“413 request entity too large”

      整體邏輯

      1. 前端:上傳文件時,進行文件分片;發起請求時,帶上第幾次分片上傳、總片數。

      2. 后端:按照分片進行文件保存,當上傳完最后一片數據時,進行文件合并,并刪除分片文


      示例代碼 下載:  http://downinfo.myhostadmin.net/upload.zip


      只是演示功能,生產環境需要加強上傳過濾


      前端 upload.html 

      <html>
      <head>
      <meta charset="utf-8">
      <title>分片上傳</title>
      <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
      </head>
      <body>
      <form method="post" id="myForm" enctype="multipart/form-data">
          <input type="file" id="file" name="file">
          <input type="submit" id="submit" value="上傳">
      </form>
      
      
      <script type="text/javascript">
          $('#submit').on('click', function(e) {
              // 阻止默認表單提交
              e.preventDefault();
      
              // 獲取屬性
              var myfile = $('#file')[0].files[0];
              var ext = myfile.name.split('.').pop();
              // 判斷ext是否為視頻
              var is_video = ['mp4', 'avi', 'rmvb', 'mkv'].indexOf(ext) > -1;
              var fileId = getFileIdentifier(myfile);
              // 數據切片
              var chunks = fileSlice(myfile, is_video);
              console.log(chunks)
              // 發送分割數據段
              sendChunk(fileId, chunks);
          })
          function getFileIdentifier(file){
           // 獲取文件標識符
           return file.name
           //return file.size + file.name;
         }
         function fileSlice(file, is_video) {
           // 切片不宜過大,過大需要 nginx 以及 php 做相應配置
              var chunkSize =  1024 * 1024 * 4;  //切片大小控制
              // 1.初始化數據
              var totalSize = file.size;
              var start = 0;
              var end = start + chunkSize;
              var chunks = [];
              // 2.使用bolb提供的slice方法切片
              while (start < totalSize) {
                  if (is_video) {
                      console.log('視頻')
                      var chunk = file.slice(start, end, 'video/mp4');
                  } else {
                      console.log('圖片')
                      var chunk = file.slice(start, end);
                  }
                  chunks.push(chunk);
                  start = end;
                  end += chunkSize;
              }
              // 3.返回切片組chunk[]
              return chunks;
          }
          function sendChunk(id, chunks){
              // 逐個提交
              // 用于保證ajax發送完畢
              var task = [];
              var totalPage=0;
              var i=0;
              totalPage=chunks.length-1;
              var fileExt = id.substr(id.lastIndexOf('.') + 1);
      
              chunks.forEach(function(chunk, index){
                  var formData = new FormData();
                  formData.append('file',chunk);
                  formData.append("fileName",id);
                  formData.append("totalPage",totalPage);
                  formData.append("page",index);
                  $.ajax({
                      type: "POST",
                      url: 'upload.php',
                      data: formData,
                      contentType: false,
                      processData: false,
                      dataType:"json",
                      async:false,
                      success: function(data){
                          // 移除已完成任務
                          task.pop();
                          if (data['status']==200){
                              console.log(data['downUrl']);
                              alert(data['downUrl']); //返回上傳文件路徑
                          }
                      }
                      })
                  task.push('file Working');
              })
          }
      </script>
      </body>
      </html>

      后端 upload.php

      <?php
      if (empty($_POST)) {
          $res = ['status' => 500];
          echo json_encode($res);
          exit;
      }
      // 創建上傳目錄
      if(!is_dir('upload')){
         mkdir('upload', 0777);
       }
      // 創建上傳緩存目錄
      if(!is_dir('tmp')){
         mkdir('upload', 0777);
       }
       
      $fileName          = isset($_POST['fileName'])?$_POST['fileName']:'';
      $page              = isset($_POST['page'])?$_POST['page']:'';
      $totalPage         = isset($_POST['totalPage'])?$_POST['totalPage']:'';
      
      $fileTmpName       = isset($_FILES['file'])?$_FILES['file']['tmp_name']:'';
      
      $status  = 206;
      $downUrl = '';
      
      
      
      if ($fileName== ''|| $page == '' || $totalPage == '' || $fileTmpName == '') {
          $res = ['status' => 500];
          echo json_encode($res);
          exit();
      }
      
      
      
      
      // 上傳文件要保存的路徑
      $fname = sprintf('./tmp/%s-%s', $fileName, $page);
      $data  = file_get_contents($fileTmpName);
      file_put_contents($fname, $data);
      
      // 整合分片文件
      //if ($save) {
      if ($totalPage ==$page) {
          $uploadFileName = sprintf('./upload/%s%s', time(),$fileName); 
          $status         = 200;
          // 合并文件,刪除分片文件  
          for ($i = 0; $i<=$totalPage; $i++) {
              $tmp =  sprintf('./tmp/%s-%s', $fileName, $i);
              $data = file_get_contents($tmp);
              file_put_contents($uploadFileName, $data, FILE_APPEND);
              @unlink($tmp);
          }
      
          $dir = trim(dirname($_SERVER['PHP_SELF']), '/');
          if ($dir!='') {
            $dir .= '/';
          }
      
          $downUrl = sprintf('%s://%s/%s%s', $_SERVER['REQUEST_SCHEME'], $_SERVER['HTTP_HOST'], $dir,trim($uploadFileName, './'));
          $res = ['status' => $status,'downUrl' => $downUrl];
          echo json_encode($res);
          exit();
      }
      
      // 返回上傳狀態
      $res = ['status' => $status,'downUrl' => $downUrl];
      echo json_encode($res);


      運行效果

      image.png


      編輯:三五互聯
      日期:2023-12-26

      收藏 】 【 打印 】   
      您可對文檔進行評分喲~

      勾選遇到的問題提交給我們,收到反饋后保證及時修正更新!

      提交反饋需要先登陸會員帳號

      上一篇:如何將新網域名轉入三五互聯
      下一篇:聚名平臺域名外部入庫流程
      若文檔內容對您沒有幫助,不能解決問題? 您還可以 咨詢在線客服提交工單搜索常見問題 ,我們將竭誠為您服務。
        >> 相關文章
       
      分享至:
      主站蜘蛛池模板: 国产黄色视屏| 国产a自拍| 激情在线一区二区三区视频| 51精品人人搡人人妻| 人妻无码Aⅴ中文系列| 波多野结衣网站| 日韩乱码卡一卡2卡三卡四| 8x国产精品视频| 亚洲欧美人成网站aaaa| 久久成人电影| 精品国产亚洲区久久露脸| 乐活家庭迅雷| 国产AV一区二区三区| 亚洲综合春色综合激情| AV无码精品一区二区三区宅噜噜 | 浪潮av色综合久久天堂| 福利姬白浆AV导航| 女同另类激情在线三区| 亚洲阿天堂v在线有码| 亚洲另在线日韩综合色| 国产又黄又爽又不遮挡视频| 粉嫩小泬无遮挡久久久久久| 欧美性白人极品hd| 亚洲精品久久片久久久久| 91爱爱视频| 国产不卡一区二区精品| 国产精品???A片在线观看| 五月婷婷中文字幕| 成人午夜高潮a∨猛片| 亚洲精品久久久久国色天香| 日韩国产精品无码一区二区三区| 又大又紧又粉嫩18p少妇| 91丨熟女丨对白| 午夜福利精品亚洲不卡| 欧洲无码一区二区三区在线观看| 综合色天天久久| 亚洲乱码国产乱码精品精剪| 影音先锋色资源无码在线观看| 超碰国产精品久久国产精品99| 插插无码视频大全不卡网站| 久久精品国产清自在天天线|