百度webuploader如何实现秒传与断点续传
生活随笔
收集整理的這篇文章主要介紹了
百度webuploader如何实现秒传与断点续传
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
因為這是小眾需求,所以默認(rèn)沒有做在webuploader里面,而只是提供hook接口,讓用戶很簡單的擴展此功能。
那么,都有哪些重要的hook接口呢?
before-send-file此hook在文件發(fā)送之前執(zhí)行
before-file此hook在文件分片(如果沒有啟用分片,整個文件被當(dāng)成一個分片)后,上傳之前執(zhí)行。
after-send-file此hook在文件所有分片都上傳完后,且服務(wù)端沒有錯誤返回后執(zhí)行。
...
對于秒傳來說,其實就是文件上傳前,把內(nèi)容讀取出來,算出md5值,然后通過ajax與服務(wù)端驗證進(jìn)行驗證, 然后根據(jù)結(jié)果選擇繼續(xù)上傳還是掉過上傳。
像這個操作里面有兩個都是異步操作,文件內(nèi)容blob讀取和ajax請求。所以這個handler必須是異步的,怎樣告訴組件此handler是異步的呢?只需要在hanlder里面返回一個promise對象就可以了,這樣webuploader就會等待此過程,監(jiān)聽此promise的完成事件,自動繼續(xù)。
以下是此思路的簡單實現(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 )
// 如果讀取出錯了,則通過reject告訴webuploader文件上傳出錯。
.fail(function() {
deferred.reject();
})
// md5值計算完成
.then(function( md5 ) {
// 與服務(wù)安驗證
$.ajax(server, {
dataType: 'json',
data: {
md5: ret
},
success: function( response ) {
// 如果驗證已經(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如何实现秒传与断点续传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习系统相比较传统的机器学习系统,针
- 下一篇: deepfakes-FaceSwap使用