百度webuploader如何实现秒传与断点续传
因?yàn)檫@是小眾需求,所以默認(rèn)沒有做在webuploader里面,而只是提供hook接口,讓用戶很簡(jiǎn)單的擴(kuò)展此功能。
那么,都有哪些重要的hook接口呢?
before-send-file此hook在文件發(fā)送之前執(zhí)行
before-file此hook在文件分片(如果沒有啟用分片,整個(gè)文件被當(dāng)成一個(gè)分片)后,上傳之前執(zhí)行。
after-send-file此hook在文件所有分片都上傳完后,且服務(wù)端沒有錯(cuò)誤返回后執(zhí)行。
...
對(duì)于秒傳來說,其實(shí)就是文件上傳前,把內(nèi)容讀取出來,算出md5值,然后通過ajax與服務(wù)端驗(yàn)證進(jìn)行驗(yàn)證, 然后根據(jù)結(jié)果選擇繼續(xù)上傳還是掉過上傳。
像這個(gè)操作里面有兩個(gè)都是異步操作,文件內(nèi)容blob讀取和ajax請(qǐng)求。所以這個(gè)handler必須是異步的,怎樣告訴組件此handler是異步的呢?只需要在hanlder里面返回一個(gè)promise對(duì)象就可以了,這樣webuploader就會(huì)等待此過程,監(jiān)聽此promise的完成事件,自動(dòng)繼續(xù)。
以下是此思路的簡(jiǎn)單實(shí)現(xiàn)。
Uploader.register({
'before-send-file': 'preupload'
}, {
preupload: function( file ) {
var me = this,
owner = this.owner,
server = me.options.server,
deferred = WebUploader.Deferred();
owner.md5File( file.source )
// 如果讀取出錯(cuò)了,則通過reject告訴webuploader文件上傳出錯(cuò)。
.fail(function() {
deferred.reject();
})
// md5值計(jì)算完成
.then(function( md5 ) {
// 與服務(wù)安驗(yàn)證
$.ajax(server, {
dataType: 'json',
data: {
md5: ret
},
success: function( response ) {
// 如果驗(yàn)證已經(jīng)上傳過
if ( response.exist ) {
owner.skipFile( file );
console.log('文件重復(fù),已跳過');
}
// 介紹此promise, webuploader接著往下走。
deferred.resolve();
}
});
});
return deferred.promise();
}
});
詳情參考:https://github.com/fex-team/webuploader/issues/142
總結(jié)
以上是生活随笔為你收集整理的百度webuploader如何实现秒传与断点续传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习系统相比较传统的机器学习系统,针
- 下一篇: deepfakes-FaceSwap使用