|
|
总所周知,上传大文件时由于各种原因突然中断,然后整个文件需要从头开始上传,这种情况非常令人抓狂??,那么怎样才可以避免这种尴尬的情况呢?分片上传或许可以搞定这个痛点3 |2 }+ l4 c' p! ]9 n7 F
原理:文件上传就是把文件切割成一个个小小的块,然后块逐一上传
% o5 c; x/ e& I$ m' a2 h" U后台约定接口:7 [% h/ p9 T3 ]/ m
1.getRestChunkInfo 获取当前文件的上传情况
0 e; |4 U2 ^- @$ R* P输入:{fileName, fileSize, md5, token}& H4 X1 d, ~! N' i
输出:{chunk_list, chunk_size, chunk_count}8 ~4 b+ I) Q5 c+ V4 V9 {( {
chunk_list是一个数组,未上传块的编号等信息,* }% o) f: f. ^6 H3 [
chunk_size:分片的大小,; _/ P; t. z% \. T1 L2 y2 m
chunk_count:分片的总次数,
+ P# g( q# o. O- y; Z% a- p2.uploadAPI
; j$ `8 I5 @ O) V8 P输入:FormData对象,块的具体信息& V- t1 L) ?/ g9 m$ h) w+ V
{file_name, file_size, file_md5, token}
5 @7 G6 M0 G% B# R2 P6 X/ e输出:一个对象,包含true/false9 {* E$ Q: X3 m, b; J
步骤:
% R( B0 _2 t7 u1.获取需要上传的文件,用md5算法做消息摘要,就是md5码作为文件的唯一标识
6 m" A3 ^* z/ N; p, W3 M9 x2 z2.将md5码、文件名、文件大小、token值作为输入参数传给后台第一个API
' k. q% c* o- }3 m! r5 y+ y3.接口返回chunk_list等参数,用chunk_list.shift取分片继续调用第二个接口,一片一片上传文件块
9 a# b$ r1 M# G$ C4.所有文件上传完成后,为了防止中间有出错的分片,在次请求第一个接口,如果chunk_list的length为0,则说明所有分片上传成功
) V( B' ^* }5 g6 U) l5 C! s; U完成上面的步骤后,后台在确认所有的分片上传完成后,就可以进行文件合并了。* G" [ b9 O6 c- E+ K9 G! M
图解:8 i2 z, G, R! }
# j. s5 A5 E C1 Y
其中token值不是必传参数,仅仅是系统为了防止CSRF攻击,出于安全考虑的。Note:安全考虑还有加签验签功能 P/ S) b0 O' X' ?) ~
难点:6 _- k9 ~+ D0 c
1.如何切片,使用Blob对象的slice方法 blob.slice(startByte,endByte);+ t& N3 g7 }( ?9 B3 \ C7 o
2.当前文件已上传的片数,然后保证我从哪一片开始上传- q6 A9 X; ^9 R7 h4 C4 ]
以上就是本次介绍的关于javascript之分片上传,断点续传的实际项目实现的全部知识点内容,有需要的朋友们可以学习下。% K, V$ W1 M$ g( j* i& y$ j8 ]
+ ` c6 f* O3 e( e& o
来源:http://www.jb51.net/article/169316.htm: R# E# s9 M7 e; {) S# r" B, j
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|