Skip to content

Commit 5417a4e

Browse files
committed
replace up.total.bytesPerSec with self-defined file.speed to fix speed error when resume upload
1 parent cc60e7c commit 5417a4e

File tree

4 files changed

+54
-6
lines changed

4 files changed

+54
-6
lines changed

demo/js/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ $(function() {
4747
'UploadProgress': function(up, file) {
4848
var progress = new FileProgress(file, 'fsUploadProgress');
4949
var chunk_size = plupload.parseSize(this.getOption('chunk_size'));
50-
progress.setProgress(file.percent + "%", up.total.bytesPerSec, chunk_size);
5150

51+
progress.setProgress(file.percent + "%", file.speed, chunk_size);
5252
},
5353
'UploadComplete': function() {
5454
$('#success').show();

demo/js/qiniu.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,12 @@ function QiniuJsSDK() {
246246
that.key_handler = typeof op.init.Key === 'function' ? op.init.Key : '';
247247
this.domain = op.domain;
248248
var ctx = '';
249+
var speedCalInfo = {
250+
isResumeUpload: false,
251+
resumeFilesize: 0,
252+
startTime: '',
253+
currentTime: ''
254+
};
249255

250256
var reset_chunk_size = function() {
251257
var ie = that.detectIEVersion();
@@ -336,11 +342,11 @@ function QiniuJsSDK() {
336342
});
337343

338344
uploader.bind('BeforeUpload', function(up, file) {
339-
345+
file.speed = file.speed || 0; // add a key named speed for file obj
340346
ctx = '';
341347

342348
var directUpload = function(up, file, func) {
343-
349+
speedCalInfo.startTime = new Date().getTime();
344350
var multipart_params_obj;
345351
if (op.save_key) {
346352
multipart_params_obj = {
@@ -392,9 +398,14 @@ function QiniuJsSDK() {
392398
if (now - before < aDay) {
393399
if (localFileInfo.percent !== 100) {
394400
if (file.size === localFileInfo.total) {
401+
// 通过文件名和文件大小匹配,找到对应的 localstorage 信息,恢复进度
395402
file.percent = localFileInfo.percent;
396403
file.loaded = localFileInfo.offset;
397404
ctx = localFileInfo.ctx;
405+
406+
// 计算速度时,会用到
407+
speedCalInfo.isResumeUpload = true;
408+
speedCalInfo.resumeFilesize = localFileInfo.offset;
398409
if (localFileInfo.offset + blockSize > file.size) {
399410
blockSize = file.size - localFileInfo.offset;
400411
}
@@ -410,6 +421,7 @@ function QiniuJsSDK() {
410421
localStorage.removeItem(file.name);
411422
}
412423
}
424+
speedCalInfo.startTime = new Date().getTime();
413425
up.setOption({
414426
'url': 'http://upload.qiniu.com/mkblk/' + blockSize,
415427
'multipart': false,
@@ -426,6 +438,18 @@ function QiniuJsSDK() {
426438
}
427439
});
428440

441+
uploader.bind('UploadProgress', function(up, file) {
442+
// 计算速度
443+
444+
speedCalInfo.currentTime = new Date().getTime();
445+
var timeUsed = speedCalInfo.currentTime - speedCalInfo.startTime; // ms
446+
var fileUploaded = file.loaded || 0;
447+
if (speedCalInfo.isResumeUpload) {
448+
fileUploaded = file.loaded - speedCalInfo.resumeFilesize;
449+
}
450+
file.speed = (fileUploaded / timeUsed * 1000).toFixed(0) || 0; // unit: byte/s
451+
});
452+
429453
uploader.bind('ChunkUploaded', function(up, file, info) {
430454
var res = that.parseJSON(info.response);
431455

src/qiniu.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,12 @@ function QiniuJsSDK() {
246246
that.key_handler = typeof op.init.Key === 'function' ? op.init.Key : '';
247247
this.domain = op.domain;
248248
var ctx = '';
249+
var speedCalInfo = {
250+
isResumeUpload: false,
251+
resumeFilesize: 0,
252+
startTime: '',
253+
currentTime: ''
254+
};
249255

250256
var reset_chunk_size = function() {
251257
var ie = that.detectIEVersion();
@@ -336,11 +342,11 @@ function QiniuJsSDK() {
336342
});
337343

338344
uploader.bind('BeforeUpload', function(up, file) {
339-
345+
file.speed = file.speed || 0; // add a key named speed for file obj
340346
ctx = '';
341347

342348
var directUpload = function(up, file, func) {
343-
349+
speedCalInfo.startTime = new Date().getTime();
344350
var multipart_params_obj;
345351
if (op.save_key) {
346352
multipart_params_obj = {
@@ -392,9 +398,14 @@ function QiniuJsSDK() {
392398
if (now - before < aDay) {
393399
if (localFileInfo.percent !== 100) {
394400
if (file.size === localFileInfo.total) {
401+
// 通过文件名和文件大小匹配,找到对应的 localstorage 信息,恢复进度
395402
file.percent = localFileInfo.percent;
396403
file.loaded = localFileInfo.offset;
397404
ctx = localFileInfo.ctx;
405+
406+
// 计算速度时,会用到
407+
speedCalInfo.isResumeUpload = true;
408+
speedCalInfo.resumeFilesize = localFileInfo.offset;
398409
if (localFileInfo.offset + blockSize > file.size) {
399410
blockSize = file.size - localFileInfo.offset;
400411
}
@@ -410,6 +421,7 @@ function QiniuJsSDK() {
410421
localStorage.removeItem(file.name);
411422
}
412423
}
424+
speedCalInfo.startTime = new Date().getTime();
413425
up.setOption({
414426
'url': 'http://upload.qiniu.com/mkblk/' + blockSize,
415427
'multipart': false,
@@ -426,6 +438,18 @@ function QiniuJsSDK() {
426438
}
427439
});
428440

441+
uploader.bind('UploadProgress', function(up, file) {
442+
// 计算速度
443+
444+
speedCalInfo.currentTime = new Date().getTime();
445+
var timeUsed = speedCalInfo.currentTime - speedCalInfo.startTime; // ms
446+
var fileUploaded = file.loaded || 0;
447+
if (speedCalInfo.isResumeUpload) {
448+
fileUploaded = file.loaded - speedCalInfo.resumeFilesize;
449+
}
450+
file.speed = (fileUploaded / timeUsed * 1000).toFixed(0) || 0; // unit: byte/s
451+
});
452+
429453
uploader.bind('ChunkUploaded', function(up, file, info) {
430454
var res = that.parseJSON(info.response);
431455

0 commit comments

Comments
 (0)