Skip to content

Commit 16cfea1

Browse files
committed
增加上传文件夹例子
1 parent d54d9c5 commit 16cfea1

File tree

2 files changed

+164
-20
lines changed

2 files changed

+164
-20
lines changed

demo/demo.js

+162-19
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,20 @@ var util = {
1414
options.type && (opt.type = options.type);
1515
var blob = new Blob([buffer], options);
1616
return blob;
17-
}
17+
},
18+
selectLocalFile: function (params, onChange) {
19+
var id = 'file_selector';
20+
var input = document.createElement('input');
21+
input.style = 'width:0;height:0;border:0;margin:0;padding:0;';
22+
input.type = 'file';
23+
input.id = id;
24+
input.onchange = function (e) {
25+
if (!this.files.length) return;
26+
onChange && onChange(files);
27+
document.body.removeChild(input);
28+
};
29+
input.click();
30+
},
1831
};
1932

2033
// 对更多字符编码的 url encode 格式
@@ -222,7 +235,7 @@ function putBucket() {
222235
logger.log(err || data);
223236
});
224237
}
225-
getObject();
238+
226239
function getBucket() {
227240
cos.getBucket({
228241
Bucket: config.Bucket, // Bucket 格式:test-1250000000
@@ -248,7 +261,7 @@ function deleteBucket() {
248261
Bucket: 'testnew-' + config.Bucket.substr(config.Bucket.lastIndexOf('-') + 1),
249262
Region: 'ap-guangzhou'
250263
}, function (err, data) {
251-
console.log(err || data);
264+
logger.log(err || data);
252265
});
253266
}
254267

@@ -677,10 +690,10 @@ function putObject() {
677690
Body: blob,
678691
onTaskReady: function (tid) {
679692
TaskId = tid;
680-
console.log('onTaskReady', tid);
693+
logger.log('onTaskReady', tid);
681694
},
682695
onTaskStart: function (info) {
683-
console.log('onTaskStart', info);
696+
logger.log('onTaskStart', info);
684697
},
685698
onProgress: function (progressData) {
686699
logger.log(JSON.stringify(progressData));
@@ -838,11 +851,8 @@ function sliceUploadFile() {
838851
}
839852

840853
function selectFileToUpload() {
841-
var input = document.getElementById('file_selector') || document.createElement('input');
842-
input.type = 'file';
843-
input.onchange = function (e) {
844-
document.body.removeChild(input);
845-
var file = this.files[0];
854+
util.selectLocalFile(function (files) {
855+
var file = files && files[0];
846856
if (!file) return;
847857
if (file.size > 1024 * 1024) {
848858
cos.sliceUploadFile({
@@ -881,11 +891,7 @@ function selectFileToUpload() {
881891
logger.log(err || data);
882892
});
883893
}
884-
};
885-
input.style = 'width:0;height:0;border:0;margin:0;padding:0;';
886-
input.id = 'file_selector';
887-
document.body.appendChild(input);
888-
input.click();
894+
});
889895
}
890896

891897
function cancelTask() {
@@ -962,7 +968,129 @@ function sliceCopyFile() {
962968
logger.log(data);
963969
}
964970
});
971+
}
972+
973+
function uploadFolder() {
974+
// <input type='file' name="file" webkitdirectory >
975+
var input = document.createElement('input');
976+
input.type = 'file';
977+
input.webkitdirectory = true;
978+
input.onchange = function(){
979+
var oFiles = input.files;
980+
if (!oFiles.length) return;
981+
var files = [];
982+
for (var i = 0; i < oFiles.length; i++) {
983+
var file = oFiles[i];
984+
var Key = 'folder/' + file.webkitRelativePath;
985+
files.push({
986+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
987+
Region: config.Region,
988+
Key: Key,
989+
Body: file,
990+
});
991+
}
992+
cos.uploadFiles({
993+
files: files,
994+
SliceSize: 1024 * 1024,
995+
onProgress: function (info) {
996+
var percent = parseInt(info.percent * 10000) / 100;
997+
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
998+
logger.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
999+
},
1000+
onFileFinish: function (err, data, options) {
1001+
logger.log(options.Key + ' 上传' + (err ? '失败' : '完成'));
1002+
},
1003+
}, function (err, data) {
1004+
logger.log(err || data);
1005+
});
1006+
};
1007+
input.click();
1008+
}
1009+
1010+
function listFolder() {
1011+
var _listFolder = function(params, callback) {
1012+
var Contents = [];
1013+
var marker;
1014+
var next = function() {
1015+
params.Marker = marker;
1016+
cos.getBucket(params, function(err, data) {
1017+
if (err) return callback(err);
1018+
if (data && data.Contents && data.Contents.length) {
1019+
data.Contents.forEach(function (item) {
1020+
Contents.push(item);
1021+
});
1022+
}
1023+
if (data.IsTruncated === 'true') {
1024+
marker = data.NextMarker;
1025+
next();
1026+
} else {
1027+
callback(null, { Contents });
1028+
}
1029+
});
1030+
};
1031+
next();
1032+
};
1033+
_listFolder({
1034+
Bucket: config.Bucket,
1035+
Region: config.Region,
1036+
Delimiter: '/', // 分隔符
1037+
Prefix: 'folder/', // 要列出的目录前缀
1038+
}, function (err, data) {
1039+
logger.log(err || data);
1040+
});
1041+
}
9651042

1043+
function deleteFolder() {
1044+
var _deleteFolder = function(params, callback) {
1045+
var deletedList = [];
1046+
var errorList = [];
1047+
var marker;
1048+
var next = function() {
1049+
params.Marker = marker;
1050+
cos.getBucket(params, function(err, data) {
1051+
if (err) return callback(err);
1052+
var Objects = [];
1053+
if (data && data.Contents && data.Contents.length) {
1054+
data.Contents.forEach(function (item) {
1055+
Objects.push({Key: item.Key});
1056+
});
1057+
}
1058+
var afterDeleted = function () {
1059+
if (data.IsTruncated === 'true') {
1060+
marker = data.NextMarker;
1061+
next();
1062+
} else {
1063+
callback(null, { Deleted: deletedList, Error: errorList });
1064+
}
1065+
};
1066+
if (Objects.length) {
1067+
cos.deleteMultipleObject({
1068+
Bucket: params.Bucket,
1069+
Region: params.Region,
1070+
Objects: Objects,
1071+
}, function (err, data) {
1072+
data.Deleted && data.Deleted.forEach(function (item) {
1073+
errorList.push(item);
1074+
});
1075+
data.Error && data.Error.forEach(function (item) {
1076+
errorList.push(item);
1077+
});
1078+
afterDeleted();
1079+
});
1080+
} else {
1081+
afterDeleted();
1082+
}
1083+
});
1084+
};
1085+
next();
1086+
};
1087+
_deleteFolder({
1088+
Bucket: config.Bucket,
1089+
Region: config.Region,
1090+
Prefix: 'folder/', // 要列出的目录前缀
1091+
}, function (err, data) {
1092+
logger.log(err || data);
1093+
});
9661094
}
9671095

9681096
(function () {
@@ -1010,22 +1138,37 @@ function sliceCopyFile() {
10101138
'restoreObject',
10111139
'abortUploadTask',
10121140
'sliceUploadFile',
1013-
'selectFileToUpload',
10141141
'cancelTask',
10151142
'pauseTask',
10161143
'restartTask',
1017-
'uploadFiles',
10181144
'sliceCopyFile',
1145+
'uploadFiles',
1146+
'selectFileToUpload',
1147+
'-',
1148+
'uploadFolder',
1149+
'listFolder',
1150+
'deleteFolder',
10191151
];
1152+
var labelMap = {
1153+
uploadFiles: '批量上传文件',
1154+
selectFileToUpload: '选择文件上传',
1155+
uploadFolder: '上传文件夹',
1156+
listFolder: '列出文件夹',
1157+
deleteFolder: '删除文件夹',
1158+
};
10201159
var container = document.querySelector('.main');
10211160
var html = [];
10221161
list.forEach(function (name) {
1023-
html.push('<a href="javascript:void(0)">' + name + '</a>');
1162+
if (name === '-') {
1163+
html.push('<hr/>');
1164+
} else {
1165+
html.push('<a href="javascript:void(0)" data-method="' + name + '">' + (labelMap[name] || name) + '</a>');
1166+
}
10241167
});
10251168
container.innerHTML = html.join('');
10261169
container.onclick = function (e) {
10271170
if (e.target.tagName === 'A') {
1028-
var name = e.target.innerText.trim();
1171+
var name = e.target.getAttribute('data-method').trim();
10291172
window[name]();
10301173
}
10311174
};

demo/index.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
h1 { font-weight: normal; color:#333;}
1313
a { color: #006eff; background-color: transparent; padding: 8px 16px; line-height: 1.3; display: inline-block; text-align: center; margin: 0 8px 8px 0; border: 1px solid #006eff; font-size: 14px; text-decoration: none; }
1414
a:hover { color: #fff; background-color: #006eff; }
15+
hr {border: 0; border-top: 1px solid #006eff;}
1516
.result {display:none;line-height:1.3;font-size: 13px;font-family:monospace;border:1px solid #006eff;margin:0;height:200px;overflow:auto;box-sizing:border-box;padding:5px;}
1617
</style>
1718
</head>
@@ -27,4 +28,4 @@ <h1>cos-js-sdk-v5</h1>
2728
<script src="./demo.js"></script>
2829

2930
</body>
30-
</html>
31+
</html>

0 commit comments

Comments
 (0)