Vuejs实现大文件分片md5断点续传.docx

上传人:b****5 文档编号:5897907 上传时间:2023-01-02 格式:DOCX 页数:6 大小:16.03KB
下载 相关 举报
Vuejs实现大文件分片md5断点续传.docx_第1页
第1页 / 共6页
Vuejs实现大文件分片md5断点续传.docx_第2页
第2页 / 共6页
Vuejs实现大文件分片md5断点续传.docx_第3页
第3页 / 共6页
Vuejs实现大文件分片md5断点续传.docx_第4页
第4页 / 共6页
Vuejs实现大文件分片md5断点续传.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

Vuejs实现大文件分片md5断点续传.docx

《Vuejs实现大文件分片md5断点续传.docx》由会员分享,可在线阅读,更多相关《Vuejs实现大文件分片md5断点续传.docx(6页珍藏版)》请在冰豆网上搜索。

Vuejs实现大文件分片md5断点续传.docx

Vuejs实现大文件分片md5断点续传

Vue.js实现大文件分片md5断点续传

背景

按照部门的业务需求,需要在网络状态不良的状况下上传很大的文件(1G+)。

其中会碰到的问题:

1,文件过大,超出服务端的哀求大小限制;

2,哀求时光过长,哀求超时;

3,传输中断,必需重新上传导致前功尽弃。

解决计划实现思路,拿到文件,保存文件唯一性标识,切割文件、分片上传、文件MD5验证、断点续传、手动重试上传。

前言

鉴于过往有用法过webupload文件上传组件的阅历,于是此次采纳的是Plupload作为替换。

Plupload是一款由闻名的web编辑器TinyMCE团队开发的上传组件,容易易用且功能强大。

Plupload有以下功能和特点

拥有多种上传方式:

HTML5、flash、silverlight以及传统的。

Plupload会自动侦测当前的环境,挑选最合适的上传方式,并且会优先用法HTML5的方式。

所以你彻低不用去操劳当前的扫瞄器支持哪些上传方式,Plupload会自动为你挑选最合适的方式。

支持以拖拽的方式来选取要上传的文件

支持在前端压缩,即在文件还未上传之前就对它举行压缩

可以挺直读取原生的文件数据,这样的益处就是例如可以在文件还未上传之前就能把它显示在页面上预览

支持把大文件切割成小片举行上传,由于有些扫瞄器对很大的文件比如几G的一些文件无法上传。

环境

vue2.x

webpack3.x

axios

代码

npm安装plupload,文件引入组件,

初始化办法filesAdded(),每次上传前清空队列的其他文件,保证上传的全都性。

第二对文件类型举行推断过滤fileType(),文件进入时举行总md5一次fileMd5(),然后进入文件分片chunkCheckStatus(),每个分片都要举行md5并与后台举行校验fileMd5(),确保文件在中断后继续上传的精确     性。

filesAdded(up,files){

//删除上传队列中其他文件,只保留最近上传的文件

letfileLen=files.length,that=this

if(fileLen>1){

files=files.splice(0,fileLen-1)//清空上传队列

}

files.forEach((f)=>{

f.status=-1

that.dataForm.file=f

that.fileType(f.getNative())

if(that.loading){

puteStatus=true

that.progress=0

//文件分片

letchunkSize=2097152,//Readinchunksof2MB

chunks=Math.ceil(f.size/chunkSize)

that.fileMd5(f.getNative(),(e,md5)=>{

that.dataForm.md5=md5

if(that.loading==true){

that.count=0

that.chunkCheckStatus(md5,that.dataForm.fileName,(uploader,dataList)=>{

that.uploading=uploader

if(that.uploading==true){

for(letchunk=1;chunk{

that.fileMd5(chunkFile,(e,blockMd5)=>{

that.PostFile(up,chunkFile,chunk,chunks,md5,blockMd5)

})

})

}

}else{

//去重

that.progress=0

for(letchunk=1;chunk{

if(item.chunk==chunk){

status=1

returnfalse

}

})

if(status==0){

that.fileChunkFile(f.getNative(),chunk,(e,chunkFile)=>{

that.fileMd5(chunkFile,(e,blockMd5)=>{

that.PostFile(up,chunkFile,chunk,chunks,md5,blockMd5)

})

})

}

}

}

})

}

})

}

})

}

文件md5办法,这里用法了SparkMD5,importSparkMD5from&39;spark-md5&39;

fileMd5(file,callback){

letthat=this

varblobSlice=File.prototype.slice||File.prototype.mozSlice||File.prototype.webkitSlice,

file=file,

chunkSize=2097152,//Readinchunksof2MB

chunks=Math.ceil(file.size/chunkSize),

currentChunk=0,

spark=newSparkMD5.ArrayBuffer(),

fileReader=newFileReader()

fileReader.onload=function(e){

console.log(&39;readchunknr&39;,currentChunk+1,&39;of&39;,chunks)

spark.append(e.target.result)//Appendarraybuffer

currentChunk++

if(currentChunk=file.size)?

file.size:

start+chunkSize

fileReader.readAsArrayBuffer(blobSlice.call(file,start,end))

}

loadNext()

}

文件分片上传办法,验证总分片信息后,把每个分片举行md5加密并上传校验,这里有写进度条相关的控制,不一一展示

chunkCheckStatus(md5,fileName,callback){

this.$http({

url:

this.$http.adornUrl(&39;/biz/upload/getFileBlockStatus&39;),

method:

&39;get&39;,

params:

this.$http.adornParams({

md5:

md5,

fileName:

fileName

})

}).then(({data})=>{

if(data&&data.code===0){

if(data.list!

=null){

this.uploading=false

this.chunkCheckData=[]

data.list.map((item,index)=>{

if(item.isUpload==true){

this.count++

this.chunkCheckData.push(item)

}

})

callback(this.uploading,this.chunkCheckData)

return

}

this.uploading=true

callback(this.uploading)

}else{

this.$message.error(data.msg)

this.loading=false

puteStatus=false

returnfalse

}

})

}

总结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1