|
|
总所周知,上传大文件时由于各种原因突然中断,然后整个文件需要从头开始上传,这种情况非常令人抓狂??,那么怎样才可以避免这种尴尬的情况呢?分片上传或许可以搞定这个痛点
8 _1 y0 g, f/ X1 w1 R1 b3 r: t, N原理:文件上传就是把文件切割成一个个小小的块,然后块逐一上传' t _0 f; s. S/ t
后台约定接口:
7 d$ @; w# d/ i! ]3 l1.getRestChunkInfo 获取当前文件的上传情况* w+ ?$ k. i; D. e# k
输入:{fileName, fileSize, md5, token}
4 M: e0 _9 _, B; ^0 G/ \' W输出:{chunk_list, chunk_size, chunk_count}, H3 C$ |- [) C! ^+ f& c
chunk_list是一个数组,未上传块的编号等信息,
! k# t# X0 f3 f) Echunk_size:分片的大小,
! l) R( E' z+ _6 F0 g' V- p# w+ schunk_count:分片的总次数,
' I( ^- a, u( b8 m1 c+ E2.uploadAPI/ U, L0 A* _- g
输入:FormData对象,块的具体信息0 @) G% D; F5 \) t
{file_name, file_size, file_md5, token}
; R7 |5 m, ^; H4 V输出:一个对象,包含true/false
/ D& { i2 q& T% [' V( j步骤:
% b: x8 D) h! [0 u1.获取需要上传的文件,用md5算法做消息摘要,就是md5码作为文件的唯一标识! H$ F$ ^3 u: h2 t: H+ R) ~
2.将md5码、文件名、文件大小、token值作为输入参数传给后台第一个API
0 C+ _5 d) y% i6 g& ?3.接口返回chunk_list等参数,用chunk_list.shift取分片继续调用第二个接口,一片一片上传文件块
: U' S& E6 T9 m1 P; B) r4.所有文件上传完成后,为了防止中间有出错的分片,在次请求第一个接口,如果chunk_list的length为0,则说明所有分片上传成功. ~- k. U4 l/ B' b6 q0 v$ N& m
完成上面的步骤后,后台在确认所有的分片上传完成后,就可以进行文件合并了。- a% {" F6 o$ T1 |5 s2 g
图解:4 t7 Y, ~$ O( b$ {, k( U

) s/ S; o/ a; E其中token值不是必传参数,仅仅是系统为了防止CSRF攻击,出于安全考虑的。Note:安全考虑还有加签验签功能
# p& v9 e3 v, t- {' D# F. ]难点:
! b# B3 n/ S" l& P8 B1.如何切片,使用Blob对象的slice方法 blob.slice(startByte,endByte);0 E$ I) M4 Z5 g: b, K0 O
2.当前文件已上传的片数,然后保证我从哪一片开始上传
( B9 B- J1 z2 I以上就是本次介绍的关于javascript之分片上传,断点续传的实际项目实现的全部知识点内容,有需要的朋友们可以学习下。0 C. W9 l; d) _
3 X1 c( r# q* |
来源:http://www.jb51.net/article/169316.htm
) R( D% ^$ ]2 d1 w) G& q. Z免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|