본문 바로가기
9. 실습 Hands-on Lab

Java SDK로 Object Storage Copy하기

by primely 2022. 11. 16.

1. API Key생성하기

아래 링크참조

Link

2. Java SDK로 Object Storage Copy하기

> Maven Dependency

  <dependency>
    <groupId>com.oracle.oci.sdk</groupId>
    <artifactId>oci-java-sdk-objectstorage</artifactId>
  </dependency>

 

> Java Code

// Object Storage를 서울Region -> 춘천Region으로 Copy하기
final String compartmentId = "ocid1.compartment.~~~~~~~~~~mkl6ezjjtc7idlpg54rqa";
final String sourceBucket = "bucket-soruce";
final String sourceObject = "test.text";
final String destBucket = "bucket-copy";
final String destObject = "test.text";

// privider가져오는 코드 생략, 위 API Key가져오기 Link참조

ObjectStorage client = new ObjectStorageClient(provider);
client.setRegion(Region.AP_SEOUL_1);

System.out.println("Getting the namespace.");
// Each Oracle Cloud Infrastructure tenant is assigned one unique and uneditable Object Storage namespace.
GetNamespaceResponse namespaceResponse =
        client.getNamespace(GetNamespaceRequest.builder().build());
String namespaceName = namespaceResponse.getValue();

System.out.println("Creating the source bucket.");
CreateBucketDetails createSourceBucketDetails =
        CreateBucketDetails.builder()
                .compartmentId(compartmentId)
                .name(sourceBucket)
                .build();
CreateBucketRequest createSourceBucketRequest =
        CreateBucketRequest.builder()
                .namespaceName(namespaceName)
                .createBucketDetails(createSourceBucketDetails)
                .build();
client.createBucket(createSourceBucketRequest);

System.out.println("Creating the source object");
PutObjectRequest putObjectRequest =
        PutObjectRequest.builder()
                .namespaceName(namespaceName)
                .bucketName(sourceBucket)
                .objectName(sourceObject)
                .contentLength(4L)
                .putObjectBody(
                        new ByteArrayInputStream("data".getBytes(StandardCharsets.UTF_8)))
                .build();
client.putObject(putObjectRequest);

System.out.println("Creating the destination bucket.");
client.setRegion(Region.AP_CHUNCHEON_1);
CreateBucketDetails createDestBucketDetails =
        CreateBucketDetails.builder().compartmentId(compartmentId).name(destBucket).build();
CreateBucketRequest createDestBucketRequest =
        CreateBucketRequest.builder()
                .namespaceName(namespaceName)
                .createBucketDetails(createDestBucketDetails)
                .build();
client.createBucket(createDestBucketRequest);

System.out.println("Copy the object.");
client.setRegion(Region.AP_SEOUL_1);
CopyObjectDetails copyObjectDetails =
        CopyObjectDetails.builder()
                .sourceObjectName(sourceObject)
                .destinationRegion(Region.AP_CHUNCHEON_1.getRegionId())
                .destinationNamespace(namespaceName)
                .destinationBucket(destBucket)
                .destinationObjectName(destObject)
                .build();
CopyObjectRequest copyObjectRequest =
        CopyObjectRequest.builder()
                .namespaceName(namespaceName)
                .bucketName(sourceBucket)
                .copyObjectDetails(copyObjectDetails)
                .build();
CopyObjectResponse copyObjectResponse = client.copyObject(copyObjectRequest);

System.out.println("Wait for copy to finish.");
GetWorkRequestRequest getWorkRequestRequest =
        GetWorkRequestRequest.builder()
                .workRequestId(copyObjectResponse.getOpcWorkRequestId())
                .build();
GetWorkRequestResponse getWorkRequestResponse =
        client.getWaiters().forWorkRequest(getWorkRequestRequest).execute();
WorkRequest.Status status = getWorkRequestResponse.getWorkRequest().getStatus();
System.out.println("Work request is now in " + status + " state.");

if (status == WorkRequest.Status.Completed) {
    System.out.println("Verify that the object has been copied.");
    client.setRegion(Region.AP_CHUNCHEON_1);
    HeadObjectRequest headObjectRequest =
            HeadObjectRequest.builder()
                    .namespaceName(namespaceName)
                    .bucketName(destBucket)
                    .objectName(destObject)
                    .build();
    client.headObject(headObjectRequest);
}

client.close();

 

Java SDK소스 Git

위 Git에서 CopyObjectExample.java 참고

 

 


작성자: 손창호(primelyson@gmail.com) / Cloud Engineer, 정보시스템감리사, DAP, PIA

개인의 시간을 할애하여 작성된 글로서 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다..

댓글