欢迎光临 - 我的站长站,本站所有资源仅供学习与参考,禁止用于商业用途或从事违法行为!

js教程

ZUI+H5大文件分块上传开发

js教程 我的站长站 2022-12-27 共72人阅读

前端代码

使用file.slice将文件进行分割,然后分别进行异步上传。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title><%= title %></title>
  <!-- zui -->
  <link rel="stylesheet" href="http://zui.sexy/dist/css/zui.min.css" rel="external nofollow" >
 </head>
 <body>
  <div style="margin-top: 30px;">
    <form method="post" enctype="multipart/form-data">
     <div>
      <input type="file" id="fileBig">
     </div>
     <button type="submit" class="btn btn-primary">提交</button>
    </form>
  </div>
  <!-- ZUI Javascript 依赖 jQuery -->
  <script src="http://zui.sexy/assets/jquery.js"></script>
  <!-- ZUI 标准版压缩后的 JavaScript 文件 -->
  <script src="http://zui.sexy/dist/js/zui.min.js"></script>
  <script type="text/javascript">
    $('form').submit(function() {
      let file = $(":file")[0].files[0];
      let fileName = file.name;
      let fileSize = file.size;
      console.log('fileSize',fileSize);
      let blockSize = 0.9*1024*1024;
      let num = Math.ceil(fileSize/blockSize);
      let start = 0;
      let end = 0;
      for(let i=1;i<=num;i++){
        end = blockSize*i;
        if(end > fileSize){
          end = fileSize;
        }
        let block = file.slice(start,end);
        start = end;
        let fd = new FormData();
        fd.append('block',block);
        fd.append('name',fileName);
        fd.append('total',num);
        fd.append('index',i);
        $.ajax({
          url:"upload.php",
          type:"POST",
          data:fd,
          async:true,
          processData:false,
          contentType:false,
          success:(res)=>{
            console.log('res_'+i+":");
            console.log(res);
          }
        })
      }
      return false;
    });
  </script>
 </body>
</html>

后端代码

在所有的文件上传成功之后,合并生成原来的大文件

<?php
$name = $_POST['name'];
$index = $_POST['index'];
$total = $_POST['total'];
echo "name:".$name.PHP_EOL;
echo "index:".$index.PHP_EOL;
echo "total:".$total.PHP_EOL;
move_uploaded_file($_FILES['block']['tmp_name'],'upload/'.$name."_".$index);
$list = scandir('upload');
$num = count($list)-2;
echo "cur_num:".$num.PHP_EOL;
if($num == $total){
  echo "upload done".PHP_EOL;
  echo $cmd = "cat upload/'{$name}_'* > upload/'{$name}'";
  shell_exec($cmd);
}


相关推荐
  • 大文件上传
  • php+ajax大文件分片上传示例代码

    代码思路PHP在上传超大的文件时,不能只让后端PHP上传,会容易上传到一半内测益处失效。需要前端要和后端相互配合一起来处理,文件上传要使用ajax的方法,而不是form的submit的方式。前端把file文件对象按一定的大小分割成一定大小的文件(如按2M或5M来分割),对...

    php教程 69 1年前
  • 宝塔面板环境上传大文件失败配置方法

    宝塔面板环境上传100M大小的文件,在上总是报错,但是在本地可以正常上传。上传小一点的文件,就不报错。代码和nginx和php的配置文件都设置了150M,超时时间也设置了,应该没啥问题。但就是报错。百度好久,网上说的答案都试了,没效果。解决方法1、fread()的方法...

    宝塔面板 270 1年前
  • php上传大文件必备配置方法

    项目要求如果你的项目需要用到大文件上传或下载功能,就必须首先修改PHP的配置才行,否则上传或下载操作就会超时,操作失败。操作步骤打开php配置文件php.ini,首先找到; file uploads ;区域,有影响文件上传的以下几个参数:file_uploads = on ;//是否允许...

    php教程 81 1年前
  • Nginx上传大文件超时设置方法

    在使用Nginx上传大文件时,需要先设置下Nginx的配置,否则就会超时。推荐修改参数client_header_timeout:读取请求头的超时时间,若超过所设定的大小,返回408错误。client_body_timeout:读取请求实体的超时时间,若超过所设定的大小,返回413错误。proxy_connect_...

    服务器配置 189 1年前
  • file.slice大文件上传新方法

    上传大文件还在苦心整合第三方插件吗,现在HTML5出了一个新方法。我们一起来看看利用file.slice上传大文件是多么简单吧。示例代码let file = $(":file")[0].files[0]; let fileSize = file.size; let blockSize = 20*1024; let num = Math.ceil(fi...

    js教程 39 1年前