cos-js-sdk-v5
Version:
JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)
652 lines (605 loc) • 23 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>cos-js-sdk-v5</title>
<style>
body { font-family: "Microsoft YaHei"; }
.page {max-width:1024px;margin:0 auto;}
h1 { font-weight: normal; color:#333;}
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; }
a:hover { color: #fff; background-color: #006eff; }
.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;}
</style>
</head>
<body>
<div class="page">
<h1>cos-js-sdk-v5</h1>
<div class="main"></div>
<pre class="result"></pre>
</div>
<script src="../dist/cos-js-sdk-v5.js"></script>
<script>
var config = {
Bucket: 'test-1250000000',
Region: 'default'
};
var util = {
createFile: function (options) {
var buffer = new ArrayBuffer(options.size || 0);
var arr = new Uint8Array(buffer);
[].forEach.call(arr, function (char, i) {
arr[i] = 0;
});
var opt = {};
options.type && (opt.type = options.type);
var blob = new Blob([buffer], options);
return blob;
}
};
var cos = new COS({
CompatibilityMode: true,
ServiceDomain: 'http://cos.default.example.com',
// 后缀式
Domain: 'http://cos.{Region}.example.com', // 后缀式
ForcePathStyle: true, // 后缀式
// 前缀式
// Domain: 'http://{Bucket}.cos.{Region}.example.com', // 前缀式
getAuthorization: function (options, callback) {
var url = './auth-json.php?method=' + options.Method + '&path=' + encodeURIComponent(options.Key);
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function (e) {
var sign;
try {
sign = JSON.parse(e.target.responseText).sign;
} catch (e) {}
callback(sign);
};
xhr.send();
},
});
var TaskId;
var pre = document.querySelector('.result');
var showLogText = function (text, color) {
if (typeof text === 'object') {
try {
text = JSON.stringify(text);
} catch (e) {
}
}
var div = document.createElement('div');
div.innerText = text;
color && (div.style.color = color);
pre.appendChild(div);
pre.style.display = 'block';
pre.scrollTop = pre.scrollHeight;
};
var logger = {
log: function (text) {
console.log.apply(console, arguments);
showLogText([].join.call(arguments, ' '));
},
error: function (text) {
console.error(text);
showLogText(text, 'red');
},
};
function getObjectUrl() {
var url = cos.getObjectUrl({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.zip',
Expires: 60,
Sign: true,
}, function (err, data) {
logger.log(err || data);
});
logger.log(url);
}
function getBucket() {
cos.getBucket({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function headBucket() {
cos.headBucket({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function putBucketAcl() {
cos.putBucketAcl({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
// GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// GrantWrite: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// GrantRead: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// GrantReadAcp: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// GrantWriteAcp: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// ACL: 'public-read-write',
// ACL: 'public-read',
ACL: 'private',
// AccessControlPolicy: {
// "Owner": { // AccessControlPolicy 里必须有 owner
// "ID": 'qcs::cam::uin/459000000:uin/459000000' // 459000000 是 Bucket 所属用户的 uin(帐号ID)
// },
// "Grants": [{
// "Grantee": {
// "ID": "qcs::cam::uin/1001:uin/1001", // 10002 是 uin(帐号ID)
// "DisplayName": "qcs::cam::uin/1001:uin/1001" // 10002 是 uin(帐号ID)
// },
// "Permission": "READ"
// }, {
// "Grantee": {
// "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "WRITE"
// }, {
// "Grantee": {
// "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "READ_ACP"
// }, {
// "Grantee": {
// "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "WRITE_ACP"
// }]
// }
}, function (err, data) {
logger.log(err || data);
});
}
function getBucketAcl() {
cos.getBucketAcl({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function putBucketCors() {
cos.putBucketCors({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
CORSConfiguration: {
"CORSRules": [{
"AllowedOrigin": ["*"],
"AllowedMethod": ["GET", "POST", "PUT", "DELETE", "HEAD"],
"AllowedHeader": ["*"],
"ExposeHeader": ["ETag", "x-cos-acl", "x-cos-delete-marker", "x-cos-server-side-encryption"],
"MaxAgeSeconds": "5"
}]
}
}, function (err, data) {
logger.log(err || data);
});
}
function getBucketCors() {
cos.getBucketCors({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function deleteBucketCors() {
cos.deleteBucketCors({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function getBucketLocation() {
cos.getBucketLocation({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function putBucketLifecycle() {
cos.putBucketLifecycle({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
LifecycleConfiguration: {
"Rules": [{
'ID': 1,
'Filter': {
'Prefix': 'test123',
},
'Status': 'Enabled',
'Transition': {
'Date': '2016-10-31T00:00:00+08:00',
'StorageClass': 'STANDARD_IA'
}
}]
}
}, function (err, data) {
logger.log(err || data);
});
}
function getBucketLifecycle() {
cos.getBucketLifecycle({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function deleteBucketLifecycle() {
cos.deleteBucketLifecycle({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region
}, function (err, data) {
logger.log(err || data);
});
}
function deleteBucket() {
cos.deleteBucket({
Bucket: 'testnew-' + config.Bucket.substr(config.Bucket.lastIndexOf('-') + 1),
Region: 'ap-guangzhou'
}, function (err, data) {
logger.log(err || data);
});
}
function putObject() {
// 创建测试文件
var filename = '1kb.zip';
var blob = util.createFile({size: 1024});
// 调用方法
cos.putObject({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: filename, /* 必须 */
Body: blob,
TaskReady: function (tid) {
TaskId = tid;
},
onProgress: function (progressData) {
logger.log(JSON.stringify(progressData));
},
}, function (err, data) {
logger.log(err || data);
});
}
function putObjectCopy() {
cos.putObjectCopy({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.copy.zip',
CopySource: config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + encodeURIComponent('1mb.zip').replace(/%2F/g, '/'), // Bucket 格式:test-1250000000
}, function (err, data) {
logger.log(err || data);
});
}
function getObject() {
cos.getObject({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.zip',
}, function (err, data) {
logger.log(err || data);
});
}
function headObject() {
cos.headObject({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.zip'
}, function (err, data) {
logger.log(err || data);
});
}
function putObjectAcl() {
cos.putObjectAcl({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.zip',
// GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// GrantWrite: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// GrantRead: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"',
// ACL: 'public-read-write',
// ACL: 'public-read',
// ACL: 'private',
ACL: 'default', // 继承上一级目录权限
// AccessControlPolicy: {
// "Owner": { // AccessControlPolicy 里必须有 owner
// "ID": 'qcs::cam::uin/459000000:uin/459000000' // 459000000 是 Bucket 所属用户的 uin(帐号ID)
// },
// "Grants": [{
// "Grantee": {
// "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "READ"
// }]
// }
}, function (err, data) {
logger.log(err || data);
});
}
function getObjectAcl() {
cos.getObjectAcl({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.zip'
}, function (err, data) {
logger.log(err || data);
});
}
function deleteObject() {
cos.deleteObject({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1mb.zip'
}, function (err, data) {
logger.log(err || data);
});
}
function deleteMultipleObject() {
cos.deleteMultipleObject({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Objects: [
{Key: '中文/中文.txt'},
{Key: '中文/中文.zip'},
]
}, function (err, data) {
logger.log(err || data);
});
}
function abortUploadTask() {
cos.abortUploadTask({
Bucket: config.Bucket, /* 必须 */ // Bucket 格式:test-1250000000
Region: config.Region, /* 必须 */
// 格式1,删除单个上传任务
// Level: 'task',
// Key: '10mb.zip',
// UploadId: '14985543913e4e2642e31db217b9a1a3d9b3cd6cf62abfda23372c8d36ffa38585492681e3',
// 格式2,删除单个文件所有未完成上传任务
Level: 'file',
Key: '10mb.zip',
// 格式3,删除 Bucket 下所有未完成上传任务
// Level: 'bucket',
}, function (err, data) {
logger.log(err || data);
});
}
function sliceUploadFile() {
var blob = util.createFile({size: 1024 * 1024 * 3});
cos.sliceUploadFile({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '3mb.zip', /* 必须 */
Body: blob,
TaskReady: function (tid) {
TaskId = tid;
},
onHashProgress: function (progressData) {
logger.log('onHashProgress', JSON.stringify(progressData));
},
onProgress: function (progressData) {
logger.log('onProgress', JSON.stringify(progressData));
},
}, function (err, data) {
logger.log(err || data);
});
}
function selectFileToUpload() {
var input = document.createElement('input');
input.type = 'file';
input.onchange = function (e) {
var file = this.files[0];
if (file) {
if (file.size > 1024 * 1024) {
cos.sliceUploadFile({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: file.name,
Body: file,
TaskReady: function (tid) {
TaskId = tid;
},
onHashProgress: function (progressData) {
logger.log('onHashProgress', JSON.stringify(progressData));
},
onProgress: function (progressData) {
logger.log('onProgress', JSON.stringify(progressData));
},
}, function (err, data) {
logger.log(err || data);
});
} else {
cos.putObject({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: file.name,
Body: file,
TaskReady: function (tid) {
TaskId = tid;
},
onProgress: function (progressData) {
logger.log(JSON.stringify(progressData));
},
}, function (err, data) {
logger.log(err || data);
});
}
}
};
input.click();
}
function cancelTask() {
cos.cancelTask(TaskId);
logger.log('canceled');
}
function pauseTask() {
cos.pauseTask(TaskId);
logger.log('paused');
}
function restartTask() {
cos.restartTask(TaskId);
logger.log('restart');
}
function uploadFiles() {
var filename = 'mb.zip';
var blob = util.createFile({size: 1024 * 1024 * 10});
cos.uploadFiles({
files: [{
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '1' + filename,
Body: blob,
}, {
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '2' + filename,
Body: blob,
}, {
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: '3' + filename,
Body: blob,
}],
SliceSize: 1024 * 1024,
onProgress: function (info) {
var percent = parseInt(info.percent * 10000) / 100;
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
logger.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
},
onFileFinish: function (err, data, options) {
logger.log(options.Key + ' 上传' + (err ? '失败' : '完成'));
},
}, function (err, data) {
logger.log(err || data);
});
}
function sliceCopyFile() {
// 创建测试文件
var sourceName = '3mb.zip';
var Key = '3mb.copy.zip';
var sourcePath = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/'+ encodeURIComponent(sourceName).replace(/%2F/g, '/');
cos.sliceCopyFile({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
Region: config.Region,
Key: Key,
CopySource: sourcePath,
SliceSize: 2 * 1024 * 1024, // 大于2M的文件用分片复制,小于则用单片复制
onProgress:function (info) {
var percent = parseInt(info.percent * 10000) / 100;
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
logger.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
}
},function (err,data) {
if(err){
logger.log(err);
}else{
logger.log(data);
}
});
}
var time0 = Date.now();
var preMsg = '页面加载完成';
var showTime = function (msg) {
var time1 = Date.now();
console.log(preMsg + '->' + msg, time1 - time0);
preMsg = msg;
time0 = time1;
};
var files;
function selectUploadFiles() {
showTime('弹出选文件窗口');
var input = document.createElement('input');
input.type = 'file';
input.multiple = true;
input.onchange = function (e) {
files = this.files;
showTime('选完文件');
};
input.click();
}
function startSelectUploadFiles() {
files.length && cos.uploadFiles({
files: [].map.call(files, function (file) {
return {
Bucket: config.Bucket,
Region: config.Region,
Key: file.name,
Body: file,
};
}),
SliceSize: 1024 * 1024,
onProgress: function (info) {
var percent = parseInt(info.percent * 10000) / 100;
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
logger.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
},
onFileFinish: function (err, data, options) {
logger.log(options.Key + ' 上传' + (err ? '失败' : '完成'));
},
}, function (err, data) {
logger.log(err || data);
});
}
(function () {
var list = [
// 'getService', // 不支持
'getAuth',
'getObjectUrl',
// 'putBucket', // 不支持
'getBucket',
'headBucket',
'putBucketAcl',
'getBucketAcl',
'putBucketCors',
'getBucketCors',
// 'deleteBucketCors', // 不提供
'getBucketLocation',
'getBucketLifecycle',
'putBucketLifecycle',
'deleteBucketLifecycle',
'deleteBucket',
'putObject',
'putObjectCopy',
'getObject',
'headObject',
'putObjectAcl',
'getObjectAcl',
'deleteObject',
'deleteMultipleObject',
'abortUploadTask',
'sliceUploadFile',
'selectFileToUpload',
'cancelTask',
'pauseTask',
'restartTask',
'uploadFiles',
'selectUploadFiles',
'startSelectUploadFiles',
];
var container = document.querySelector('.main');
var html = [];
list.forEach(function (name) {
html.push('<a href="javascript:void(0)">' + name + '</a>');
});
container.innerHTML = html.join('');
container.onclick = function (e) {
if (e.target.tagName === 'A') {
var name = e.target.innerText.trim();
window[name]();
}
};
})();
</script>
</body>
</html>