首页 > 其他分享 >超大文件上传 WebUploader 断点续传,分片上传

超大文件上传 WebUploader 断点续传,分片上传

时间:2023-11-17 18:46:11浏览次数:31  
标签:function 断点续传 file 文件 WebUploader uploader 上传 find

你只需要把这个HTML创建就能用,我这是从网上结合多个写的案例所改

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
integrity="sha256-pasqAKBDmFT4eHoN2ndd6lN370kFiGUFyTiUHWhU7k8="
crossorigin="anonymous"></script>-
<script src="http://cdn.staticfile.org/webuploader/0.1.0/webuploader.js"></script>
<link href="https://cdn.bootcss.com/webuploader/0.1.1/webuploader.css" rel="stylesheet">

</head>

<body>
<div id="uploadfile">
<div id="picker">
<button id="bottom-ok">选择文件</button>
</div>
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list">
<table class="table" border="1" cellpadding="0" cellspacing="0" width="100%">
<tr class="filelist-head">
<th width="5%" class="file-num">序号</th>
<th class="file-name">视频名称</th>
<th class="file-size">大小</th>
<th width="20%" class="file-pro">进度</th>
<th class="file-status">状态</th>
<th width="20%" class="file-manage">操作</th>
</tr>
</table>
</div>
<div id="ctlBtn" class="btn btn-default">
<button>开始上传</button>
</div>
</div>

<script>
$(function () {


//视频上传 start
var $list = $('#thelist .table'),
$btn = $('#ctlBtn');

WebUploader.Uploader.register({
'before-send': 'beforesend',
}, {

beforesend: function(block) {
var deferred = WebUploader.Deferred();
// 模拟一次异步操作。
$.ajax({
type: "POST",
url: '/upload/exitsChunks',
data: {
name: block.file.name,
chunks: block.chunks,
chunk: block.chunk,
size: block.end-block.start,
},
dataType: 'json',
async: false, // 同步
success: function (data) {
if (data == 1) {
deferred.reject();
} else {
deferred.resolve();
}
},

});
return deferred.promise();
}
});

var uploader = WebUploader.create({
resize: false, // 不压缩image
swf: 'https://cdn.bootcss.com/webuploader/0.1.0/Uploader.swf', // swf文件路径
server: '/upload/bigfile', // 文件接收服务端。
pick: '#picker', // 选择文件的按钮。可选
chunked: true, //是否要分片处理大文件上传
chunkSize: 5 * 1024 * 1024, //分片上传,每片2M,默认是5M
threads: 3, // 线程访问数
// 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候,把图片打开。
disableGlobalDnd: true,
// auto: true, //选择文件后是否自动上传
// chunkRetry: 0, //如果某个分片由于网络问题出错,允许自动重传次数
// runtimeOrder: 'html5,flash',
// accept: {
// title: 'Images',
// extensions: 'gif,jpg,jpeg,bmp,png',
// mimeTypes: 'image/*'
// }
duplicate: false //是否支持重复上传
});

 

 

// 当有文件被添加进队列的时候-md5序列化
uploader.on('fileQueued', function (file) {
$list.append('<tr id="' + file.id + '" class="file-item">' +
'<td width="5%" class="file-num">1</td>' + '<td class="file-name">' + file.name
+ '</td>' + '<td width="20%" class="file-size">' + (file.size / 1024 / 1024).toFixed(2)
+ 'M' + '</td>' + '<td width="20%" class="file-pro">0%</td>' + '<td class="file-status">等待上传</td>'
+ '<td width="20%" class="file-manage"><a class="stop-btn" href="javascript:;">暂停</a>&bscr;' +
'<a class="remove-this" href="javascript:;">取消</a></td>' + '</tr>');

//暂停上传的文件
$list.on('click', '.stop-btn', function () {
uploader.stop(true);
});

//删除上传的文件
$list.on('click', '.remove-this', function () {
if ($(this).parents(".file-item").attr('id') == file.id) {
uploader.removeFile(file);
$(this).parents(".file-item").remove();
}
});


});

uploader.on('uploadBeforeSend', function (block, data) {
var file = block.file;
data.md5value = file.wholeMd5;
data.status = file.status;
});

//重复添加文件
var timer1;
uploader.onError = function (code) {
clearTimeout(timer1);
timer1 = setTimeout(function () {
layer.msg('该文件已存在');
alert("该文件已存在");
}, 250);
};

// 文件上传过程中创建进度条实时显示
uploader.on('uploadProgress', function (file, percentage) {
$("td.file-pro").text("");
var $li = $('#' + file.id).find('.file-pro'),
$percent = $li.find('.file-progress .progress-bar');

// 避免重复创建
if (!$percent.length) {
$percent = $('<div class="file-progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 100%">' +
'</div>' +
'</div>' + '<br/><div class="per">0%</div>').appendTo($li).find('.progress-bar');
}

$li.siblings('.file-status').text('上传中');
$li.find('.per').text((percentage * 100).toFixed(2) + '%');

$percent.css('width', percentage * 100 + '%');
});
// 文件上传成功
uploader.on('uploadSuccess', function (file) {
$('#' + file.id).find('.file-status').text('已上传');
$('#' + file.id).find('.file-pro').text('100%');

});

// 文件上传失败,显示上传出错
uploader.on('uploadError', function (file) {
$('#' + file.id).find('.file-status').text('上传出错');
});
// 完成上传完后将视频添加到视频列表,显示状态为:转码中
uploader.on('uploadComplete', function (file) {
$('#' + file.id).find('.file-progress').fadeOut();
});


$btn.on('click', function (data) {
if ($(this).hasClass('disabled')) {
return false;
}
uploader.upload();
});
});

</script>
</body>
</html>

 

参考文章:http://blog.ncmem.com/wordpress/2023/11/17/%e8%b6%85%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0-webuploader-%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0%ef%bc%8c%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0/

欢迎入群一起讨论

 

 

标签:function,断点续传,file,文件,WebUploader,uploader,上传,find
From: https://www.cnblogs.com/songsu/p/17839461.html

相关文章

  • 记一个漏洞处理,SSH框架上传限制文件类型,以及关于文件上传安全问题的讨论
    -----------------------------------------------------------------------------------------------------------------------------------与同事讨论的文件上传安全问题:1.老项目采用的上传至项目下某个目录的做法是很不安全的,容易被访问到上传文件,应当制定到项目之外的目......
  • vue-富文本/自定义上传图片
    1、下载组件npminstallvue-quill-editor–D2、在需要的组件内引入富文本import{quillEditor}from'vue-quill-editor'import'quill/dist/quill.core.css'import'quill/dist/quill.snow.css'import'quill/dist/quill.bubble.css'com......
  • 大文件断点续传
    spark-md5spark-md5.js号称是最适合前端最快的算法,能快速计算文件的md5。spark-md5提供了两个计算md5的方法。一种是用SparkMD5.hashBinary()直接将整个文件的二进制码传入,直接返回文件的md5。这种方法对于小文件会比较有优势——简单而且速度超快。另一种方法是利用js......
  • 实现多个大文件拖拽上传+大文件分片上传+断点续传+文件预览
    技术关键词前端:@vue/cli-service+element-ui+axios后端:node.js+koa思路分析拖拽上传拖拽上传是利用HTML5新特性实现拖拽上传,详细用法可阅读MDN-drag利用dragover事件(当某物被拖动的对象在另一对象容器范围内拖动时触发此事件)和drop事件(在一个拖动过程中,释放鼠标键时......
  • 单文件WebUploader做大文件的分块和断点续传
    前言:WebUploader是由BaiduWebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS6+,android4+。两套运行时,同样的调用方式,可供用户任意选用。 上面......
  • vue上传视频插件
    视频作为一种信息表达方式,越来越受到人们的关注和喜爱。近年来,随着移动互联网的普及,手机、平板电脑等设备可以随时随地观看视频。在开发网站或移动应用时,上传和展示视频成为一项不可或缺的功能。Vue作为一种现代化JavaScript框架,提供了丰富的开发工具和插件,其中视频上传插件是Vue开......
  • vue实现视频上传功能
    本文实例为大家分享了vue实现视频上传功能的具体代码,供大家参考,具体内容如下环境:vue+TS上传视频+上传到阿里云主要处理前端在vue下上传视频使用的是阿里云的视频点播服务1、需要后台去申请一个开发API,请求阿里云的接口访问控制2、有了开发视频的token,供给前端3、前端去请求阿......
  • 大文件上传的处理方法——切片上传
    本篇介绍了切片上传的基本实现方式,以及实现切片上传后的一些附加功能,切片上传原理较为简单,代码注释比较清晰就不多赘述了,后面的附加功能介绍了实现原理,并贴出了在原本代码上的改进方式。有什么错误希望大佬可以指出,感激不尽。切片后上传切片上传的原理较为简单,即获取文件后切片,切片......
  • 前端大文件上传如何做到刷新续传?
    前言这两天在学习阿里云oss上传。踩了不少坑,终于实现了大文件分片、断点续传的功能。这篇文章主要分享学习笔记,希望能给大家一些帮助。先看效果 技术栈1.前端:react+Ts+axios上传文件2.Node部分:定义接口、阿里云oss3.socket.io:实时同步上传进度特别说明axios中onUploadPr......
  • java如何做大体积的文件上传和下载
    在Java中,实现大体积文件的上传和下载涉及到处理文件的分片、并发上传、断点续传等问题。本文将详细介绍如何通过Java实现大体积文件的上传和下载。1.文件上传文件上传是将本地文件上传到服务器的过程。对于大体积文件的上传,我们可以将文件分成多个小片段进行并发上传。1.1文件分......