使用WebUploader实现分片上传文件

WebUploader的官网
http://fex.baidu.com/webuploader/doc/index.html

关于上传文件, 我有写过片关于ant 使用upload上传文件
https://blog.csdn.net/zm_miner/article/details/95083719
但是现在修改成分片上传, 使用WebUploader实现大文件分片上传,并且有进度显示

html中写的eg
直接复制就可以跑起来用起来

没有用到md5

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href="https://cdn.staticfile.org/webuploader/0.1.5/webuploader.css" rel="stylesheet" type="text/css" />
  <script type="text/javascript" src="http://cdn.staticfile.org/jquery/1.10.2/jquery.js"></script>
  <script type="text/javascript" src="http://cdn.staticfile.org/webuploader/0.1.5/webuploader.min.js"></script>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>

<body>
  <div id="uploader" class="wu-example">
    <!--用来存放文件信息-->
    <div id="thelist" class="uploader-list"></div>
    <div class="btns">
      <div id="picker">选择文件</div>
      <button id="ctlBtn" class="btn btn-default">开始上传</button>
      <div id="progress"></div>
    </div>
  </div>
</body>
<script type="text/javascript">
  var GUID = WebUploader.Base.guid();//一个GUID
  var chunkSize = 5 * 1024 * 1024;
  var $thelist = $('#thelist');

  var uploader = WebUploader.create({
    // // 指定选择文件的按钮容器,不指定则不创建按钮。
    pick: {
      id: '#picker', // 指定选择文件的按钮容器,不指定则不创建按钮。注意 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点
      label: '选择文件1', // 请采用 innerHTML 代替
      multiple: true   // 是否开起同时选择多个文件能力
    },
    auto: false, // 设置为 true 后,不需要手动调用上传,有文件选择即开始上传
    prepareNextFile: true, //否允许在文件传输时提前把下一个文件准备好。 某些文件的准备工作比较耗时,比如图片压缩,md5序列化。 如果能提前在当前文件传输期处理,可以节省总体耗时。
    chunked: true, // 是否要分片处理大文件上传
    chunkSize: 5 * 1024 * 1024,  // 如果要分片,分多大一片? 默认大小为5M
    chunkRetry: 4, //如果某个分片由于网络问题出错,允许自动重传多少次
    chunkRetryDelay: 1000, // 开启重试后,设置重试延时时间, 单位毫秒
    threads: 3, // 上传并发数。允许同时最大上传进程数
    formData: {
      uid: 0,
      md5: '',
      chunkSize: chunkSize,
      guid: GUID,

    },
    server: 'http://172.18.71.64:18000/upload/upload',
    swf: 'http://cdn.staticfile.org/webuploader/0.1.5/Uploader.swf',
    fileNumLimit: 1000, //验证文件总数量, 超出则不允许加入队列
    fileSizeLimit: 1024 * 1024 * 1024 * 1024, // 10G,验证文件总大小是否超出限制, 超出则不允许加入队列
    fileSingleSizeLimit: 1024 * 1024 * 1024 * 10,// 验证单个文件大小是否超出限制, 超出则不允许加入队列
    duplicate: false, //去重, 根据文件名字、文件大小和最后修改时间来生成hash Key
  });


  $("#ctlBtn").click(function () {
    uploader.upload();
  });
  // // 当文件添加进队列以后触发
  uploader.on('filesQueued', function (files) {
    console.log("filesQueued");
    for (var i = 0; i < files.length; i++) {
      $thelist.append('<div id="' + files[i].id + '" class="item">' +
        '<h4 class="info">' + files[i].name + '</h4>' +
        '<p class="state">等待上传...</p>' +
        '</div>');
    }
  });
  //当文件上传成功时触发。
  uploader.on("uploadSuccess", function (file) {
    $.post('http://172.18.71.64:18000/upload/merge', { guid: GUID, fileName: file.name }, function (data) {
      if (data.code == 200) {
        alert('上传成功!');
      }
    });
  });
  // 上传过程中触发,携带上传进度
  uploader.on('uploadProgress', function (file, percentage) {
    console.log('uploadProgress')
    percentage = percentage.toFixed(2);
    getProgressBar(file, percentage, "FILE", "上传进度");
  });



  /**
  *  生成进度条封装方法
  * @param file 文件
  * @param percentage 进度值
  * @param id_Prefix id前缀
  * @param titleName 标题名
  */
  function getProgressBar(file, percentage, id_Prefix, titleName) {
    var $li = $('#' + file.id), $percent = $li.find('#' + id_Prefix + '-progress-bar');
    // 避免重复创建
    if (!$percent.length) {
      $percent = $('<div id="' + id_Prefix + '-progress" class="progress progress-striped active">' +
        '<div id="' + id_Prefix + '-progress-bar" class="progress-bar" role="progressbar" style="width: 0%">' +
        '</div>' +
        '</div>'
      ).appendTo($li).find('#' + id_Prefix + '-progress-bar');
    }
    var progressPercentage = percentage * 100 + '%';
    $percent.css('width', progressPercentage);
    $percent.html(titleName + ':' + progressPercentage);
  }


</script>

</html>

在这里插入图片描述

发布了47 篇原创文章 · 获赞 42 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/zm_miner/article/details/102627107