Skip to content

Commit fc865b9

Browse files
committed
修改进度反馈 bug,修改参数缺失提示,修改参数对象污染问题
1 parent 40d1f4b commit fc865b9

File tree

8 files changed

+528
-382
lines changed

8 files changed

+528
-382
lines changed

dist/cos-js-sdk-v5.js

Lines changed: 266 additions & 193 deletions
Large diffs are not rendered by default.

dist/cos-js-sdk-v5.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/advance.js

Lines changed: 69 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var Async = require('../lib/async');
1+
var Async = require('./async');
22
var EventProxy = require('./event').EventProxy;
33
var util = require('./util');
44

@@ -17,7 +17,7 @@ function sliceUploadFile(params, callback) {
1717
var FileSize;
1818
var self = this;
1919

20-
var onProgress = params.onProgress;
20+
var onProgress;
2121
var onHashProgress = params.onHashProgress;
2222

2323
// 上传过程中出现错误,返回错误
@@ -38,13 +38,15 @@ function sliceUploadFile(params, callback) {
3838
Region: Region,
3939
Key: Key,
4040
UploadId: UploadData.UploadId,
41-
SliceList: UploadData.SliceList
41+
SliceList: UploadData.SliceList,
4242
}, function (err, data) {
4343
if (!self._isRunningTask(TaskId)) return;
4444
delete uploadIdUsing[UploadData.UploadId];
4545
if (err) {
46+
onProgress(null, true);
4647
return ep.emit('error', err);
4748
}
49+
onProgress({loaded: FileSize, total: FileSize}, true);
4850
removeUploadId.call(self, UploadData.UploadId);
4951
ep.emit('upload_complete', data);
5052
});
@@ -54,7 +56,7 @@ function sliceUploadFile(params, callback) {
5456
ep.on('get_upload_data_finish', function (UploadData) {
5557

5658
// 处理 UploadId 缓存
57-
var uuid = getFileUuid(Body, params.ChunkSize);
59+
var uuid = util.getFileUUID(Body, params.ChunkSize);
5860
uuid && setUploadId.call(self, uuid, UploadData.UploadId); // 缓存 UploadId
5961
uploadIdUsing[UploadData.UploadId] = true; // 标记 UploadId 为正在使用
6062
TaskId && self.on('inner-kill-task', function (data) {
@@ -78,13 +80,19 @@ function sliceUploadFile(params, callback) {
7880
onProgress: onProgress
7981
}, function (err, data) {
8082
if (!self._isRunningTask(TaskId)) return;
81-
if (err) return ep.emit('error', err);
83+
if (err) {
84+
onProgress(null, true);
85+
return ep.emit('error', err);
86+
}
8287
ep.emit('upload_slice_complete', data);
8388
});
8489
});
8590

8691
// 开始获取文件 UploadId,里面会视情况计算 ETag,并比对,保证文件一致性,也优化上传
8792
ep.on('get_file_size_finish', function () {
93+
94+
onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
95+
8896
if (params.UploadData.UploadId) {
8997
ep.emit('get_upload_data_finish', params.UploadData);
9098
} else {
@@ -111,7 +119,7 @@ function sliceUploadFile(params, callback) {
111119
});
112120

113121
// 获取上传文件大小
114-
FileSize = Body.size || params.ContentLength;
122+
FileSize = params.ContentLength;
115123
delete params.ContentLength;
116124
!params.Headers && (params.Headers = {});
117125
util.each(params.Headers, function (item, key) {
@@ -151,7 +159,7 @@ function initUploadId() {
151159
if (!uploadIdCache) {
152160
if (cacheLimit) {
153161
try {
154-
uploadIdCache = JSON.parse(localStorage.getItem(uploadIdCacheKey)) || [];
162+
uploadIdCache = JSON.parse(util.localStorage.getItem(uploadIdCacheKey)) || [];
155163
} catch (e) {}
156164
}
157165
if (!uploadIdCache) {
@@ -173,7 +181,7 @@ function setUploadId(uuid, UploadId, isDisabled) {
173181
}
174182
cacheLimit && setTimeout(function () {
175183
try {
176-
localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache));
184+
util.localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache));
177185
} catch (e) {}
178186
});
179187
}
@@ -192,9 +200,9 @@ function removeUploadId(UploadId) {
192200
cacheLimit && setTimeout(function () {
193201
try {
194202
if (uploadIdCache.length) {
195-
localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache));
203+
util.localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache));
196204
} else {
197-
localStorage.removeItem(uploadIdCacheKey);
205+
util.localStorage.removeItem(uploadIdCacheKey);
198206
}
199207
} catch (e) {}
200208
});
@@ -209,22 +217,13 @@ function getUploadId(uuid) {
209217
}
210218
return CacheUploadIdList.length ? CacheUploadIdList : null;
211219
}
212-
function getFileUuid(file, ChunkSize) {
213-
// 如果信息不完整,不获取
214-
if (file.name && file.size && file.lastModifiedDate && ChunkSize) {
215-
return util.md5([file.name, file.size, file.lastModifiedDate, ChunkSize].join('::'));
216-
} else {
217-
return null;
218-
}
219-
}
220220

221221
// 获取上传任务的 UploadId
222222
function getUploadIdAndPartList(params, callback) {
223223
var TaskId = params.TaskId;
224224
var Bucket = params.Bucket;
225225
var Region = params.Region;
226226
var Key = params.Key;
227-
var Body = params.Body;
228227
var StorageClass = params.StorageClass;
229228
var self = this;
230229

@@ -248,8 +247,8 @@ function getUploadIdAndPartList(params, callback) {
248247
Size: ChunkSize
249248
});
250249
} else {
251-
var blob = util.fileSlice(Body, start, end);
252-
util.getFileMd5(blob, function (err, md5) {
250+
var chunkItem = util.fileSlice(params.Body, start, end);
251+
util.getFileMd5(chunkItem, function (err, md5) {
253252
if (err) return callback(err);
254253
var ETag = '"' + md5 + '"';
255254
ETagMap[PartNumber] = ETag;
@@ -410,7 +409,7 @@ function getUploadIdAndPartList(params, callback) {
410409
// 在本地缓存找可用的 UploadId
411410
ep.on('seek_local_avail_upload_id', function (RemoteUploadIdList) {
412411
// 在本地找可用的 UploadId
413-
var uuid = getFileUuid(params.Body, params.ChunkSize), LocalUploadIdList;
412+
var uuid = util.getFileUUID(params.Body, params.ChunkSize), LocalUploadIdList;
414413
if (uuid && (LocalUploadIdList = getUploadId.call(self, uuid))) {
415414
var next = function (index) {
416415
// 如果找不到,到线上列出 UploadId
@@ -477,7 +476,7 @@ function getUploadIdAndPartList(params, callback) {
477476
if (RemoteUploadIdList.length) {
478477
ep.emit('seek_local_avail_upload_id', RemoteUploadIdList);
479478
} else {
480-
var uuid = getFileUuid(params.Body, params.ChunkSize), LocalUploadIdList;
479+
var uuid = util.getFileUUID(params.Body, params.ChunkSize), LocalUploadIdList;
481480
if (uuid && (LocalUploadIdList = getUploadId.call(self, uuid))) {
482481
util.each(LocalUploadIdList, function (UploadId) {
483482
removeUploadId.call(self, UploadId);
@@ -573,8 +572,7 @@ function uploadSliceList(params, cb) {
573572
}
574573
return !SliceItem['Uploaded'];
575574
});
576-
577-
var onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
575+
var onProgress = params.onProgress;
578576

579577
Async.eachLimit(needUploadSlices, ChunkParallel, function (SliceItem, asyncCallback) {
580578
if (!self._isRunningTask(TaskId)) return;
@@ -599,7 +597,7 @@ function uploadSliceList(params, cb) {
599597
},
600598
}, function (err, data) {
601599
if (!self._isRunningTask(TaskId)) return;
602-
if (!err && !data.ETag) {
600+
if (util.isBrowser && !err && !data.ETag) {
603601
err = 'get ETag error, please add "ETag" to CORS ExposeHeader setting.';
604602
}
605603
if (err) {
@@ -613,10 +611,7 @@ function uploadSliceList(params, cb) {
613611

614612
}, function (err) {
615613
if (!self._isRunningTask(TaskId)) return;
616-
onProgress(null, true);
617-
if (err) {
618-
return cb(err);
619-
}
614+
if (err) return cb(err);
620615
cb(null, {
621616
UploadId: UploadData.UploadId,
622617
SliceList: UploadData.PartList
@@ -708,7 +703,6 @@ function uploadSliceComplete(params, callback) {
708703
if (err) {
709704
return callback(err);
710705
}
711-
712706
callback(null, data);
713707
});
714708
}
@@ -888,53 +882,56 @@ function uploadFiles(params, callback) {
888882
// 开始处理每个文件
889883
var taskList = [];
890884
util.each(params.files, function (fileParams, index) {
885+
(function (){
891886

892-
var Body = fileParams.Body;
893-
var FileSize = Body.size || Body.length || 0;
894-
var fileInfo = {Index: index, TaskId: ''};
887+
var Body = fileParams.Body;
888+
var FileSize = Body.size || Body.length || 0;
889+
var fileInfo = {Index: index, TaskId: ''};
895890

896-
// 更新文件总大小
897-
TotalSize += FileSize;
891+
// 更新文件总大小
892+
TotalSize += FileSize;
898893

899-
// 整理 option,用于返回给回调
900-
util.each(fileParams, function (v, k) {
901-
if (typeof v !== 'object' && typeof v !== 'function') {
902-
fileInfo[k] = v;
903-
}
904-
});
894+
// 整理 option,用于返回给回调
895+
util.each(fileParams, function (v, k) {
896+
if (typeof v !== 'object' && typeof v !== 'function') {
897+
fileInfo[k] = v;
898+
}
899+
});
905900

906-
// 处理单个文件 TaskReady
907-
var _TaskReady = fileParams.TaskReady;
908-
var TaskReady = function (tid) {
909-
fileInfo.TaskId = tid;
910-
_TaskReady && _TaskReady(tid);
911-
};
912-
fileParams.TaskReady = TaskReady;
913-
914-
// 处理单个文件进度
915-
var PreAddSize = 0;
916-
var _onProgress = fileParams.onProgress;
917-
var onProgress = function (info) {
918-
TotalFinish = TotalFinish - PreAddSize + info.loaded;
919-
PreAddSize = info.loaded;
920-
_onProgress && _onProgress(info);
921-
onTotalProgress({loaded: TotalFinish, total: TotalSize});
922-
};
923-
fileParams.onProgress = onProgress;
901+
// 处理单个文件 TaskReady
902+
var _TaskReady = fileParams.TaskReady;
903+
var TaskReady = function (tid) {
904+
fileInfo.TaskId = tid;
905+
_TaskReady && _TaskReady(tid);
906+
};
907+
fileParams.TaskReady = TaskReady;
908+
909+
// 处理单个文件进度
910+
var PreAddSize = 0;
911+
var _onProgress = fileParams.onProgress;
912+
var onProgress = function (info) {
913+
TotalFinish = TotalFinish - PreAddSize + info.loaded;
914+
PreAddSize = info.loaded;
915+
_onProgress && _onProgress(info);
916+
onTotalProgress({loaded: TotalFinish, total: TotalSize});
917+
};
918+
fileParams.onProgress = onProgress;
924919

925-
// 处理单个文件完成
926-
var _onFileFinish = fileParams.onFileFinish;
927-
var onFileFinish = function (err, data) {
928-
_onFileFinish && _onFileFinish(err, data);
929-
onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
930-
};
920+
// 处理单个文件完成
921+
var _onFileFinish = fileParams.onFileFinish;
922+
var onFileFinish = function (err, data) {
923+
_onFileFinish && _onFileFinish(err, data);
924+
onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
925+
};
931926

932-
// 添加上传任务
933-
taskList.push({
934-
api: FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject',
935-
params: fileParams,
936-
callback: onFileFinish,
937-
});
927+
// 添加上传任务
928+
var api = FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject';
929+
taskList.push({
930+
api: api,
931+
params: fileParams,
932+
callback: onFileFinish,
933+
});
934+
})();
938935
});
939936
self._addTasks(taskList);
940937
}
File renamed without changes.

0 commit comments

Comments
 (0)