<meta charset="UTF-8" />
<button id="upload">Upload</button>
<button id="copy">Copy</button>
<input id="file" type="file" />
<script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script>
<script type="text/javascript">
const client = new TOS({
accessKeyId: yourAccessKey,
accessKeySecret: yourSecretKey,
stsToken: yourSecurityToken,
const srcBucket = yourSrcBucket;
const srcObject = 'exampledir/putObject-test';
const dstBucket = yourDstBucket;
const dstObject = 'exampledir/part-copy-test';
const upload = document.getElementById('upload');
upload.addEventListener('click', async () => {
const data = document.getElementById('file').files[0];
await client.uploadFile({
const copy = document.getElementById('copy');
copy.addEventListener('click', async () => {
} = await client.createMultipartUpload({
console.log('UploadId', UploadId);
data: { 'content-length': contentLength },
} = await client.headObject({
console.log('srcObject content-length', contentLength);
const totalSize = contentLength;
const partSize = 5 * 1024 * 1024;
while (offset < totalSize) {
const uploadResult = await client.uploadPartCopy({
'x-tos-copy-source': `/${srcBucket}/${srcObject}`,
'x-tos-copy-source-range': `bytes=${offset}-${offset + partSize}`,
const eTag = uploadResult.data.ETag;
console.log(`partNumber${partNumber} Etag:`, eTag);
console.log('parts information', partsInfo);
const { data } = await client.completeMultipartUpload({
console.log('result data:', data);