import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosClientException;
import com.volcengine.tos.TosServerException;
import com.volcengine.tos.comm.event.CopyEventType;
import com.volcengine.tos.model.object.CopyEvent;
import com.volcengine.tos.model.object.CopyEventListener;
import com.volcengine.tos.model.object.ResumableCopyObjectInput;
import com.volcengine.tos.model.object.ResumableCopyObjectOutput;
public class ResumableCopyObjectWithEventListenerExample {
public static void main(String[] args) {
String endpoint = "your endpoint";
String region = "your region";
String accessKey = System.getenv("TOS_ACCESS_KEY");
String secretKey = System.getenv("TOS_SECRET_KEY");
String bucketName = "bucket-example";
String objectKey = "example_dir/example_object.txt";
String sourceBucketName = "source-bucket";
String sourceObjectKey = "src_example_dir/src_example_object.txt";
long partSize = 10 * 1024 * 1024;
boolean enableCheckpoint = true;
String checkpointFilePath = "the checkpoint file path";
TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);
CopyEventListener listener = new CopyEventListener() {
public void eventChange(CopyEvent copyEvent) {
if (copyEvent.getType() == CopyEventType.CopyEventCreateMultipartUploadSucceed) {
System.out.println("event change, createMultipartUpload succeed");
if (copyEvent.getType() == CopyEventType.CopyEventCreateMultipartUploadFailed) {
System.out.println("event change, createMultipartUpload failed");
if (copyEvent.getType() == CopyEventType.CopyEventUploadPartCopySucceed) {
System.out.println("event change, uploadPartCopy succeed");
if (copyEvent.getType() == CopyEventType.CopyEventUploadPartCopyFailed) {
System.out.println("event change, uploadPartCopy failed");
if (copyEvent.getType() == CopyEventType.CopyEventUploadPartCopyAborted) {
System.out.println("event change, uploadPartCopy aborted");
if (copyEvent.getType() == CopyEventType.CopyEventCompleteMultipartUploadSucceed) {
System.out.println("event change, completeMultipartUpload succeed");
if (copyEvent.getType() == CopyEventType.CopyEventCompleteMultipartUploadFailed) {
System.out.println("event change, completeMultipartUpload failed");
ResumableCopyObjectInput input = new ResumableCopyObjectInput().setBucket(bucketName).setKey(objectKey)
.setSrcBucket(sourceBucketName).setSrcKey(sourceObjectKey).setTaskNum(taskNum).setPartSize(partSize)
.setEnableCheckpoint(enableCheckpoint).setCheckpointFile(checkpointFilePath).setCopyEventListener(listener);
ResumableCopyObjectOutput output = tos.resumableCopyObject(input);
System.out.println("resumableCopyObject succeed, object's etag is " + output.getEtag());
System.out.println("resumableCopyObject succeed, object's crc64 is " + output.getHashCrc64ecma());
} catch (TosClientException e) {
System.out.println("resumableCopyObject failed");
System.out.println("Message: " + e.getMessage());
if (e.getCause() != null) {
e.getCause().printStackTrace();
} catch (TosServerException e) {
System.out.println("resumableCopyObject failed");
System.out.println("StatusCode: " + e.getStatusCode());
System.out.println("Code: " + e.getCode());
System.out.println("Message: " + e.getMessage());
System.out.println("RequestID: " + e.getRequestID());
System.out.println("resumableCopyObject failed");
System.out.println("unexpected exception, message: " + t.getMessage());