최신 업데이트:2025-08-18 15:54:18
WOS Java SDK는 다양한 오브젝트 다운로드 인터페이스를 제공합니다. WosClient.getObject를 사용하여 오브젝트를 다운로드할 수 있습니다.
아래 코드는 스트림 방식으로 오브젝트를 다운로드하는 방법을 보여줍니다.
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient 인스턴스 생성
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
// 오브젝트 내용 읽기
System.out.println("Object content:");
InputStream input = wosObject.getObjectContent();
byte[] b = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
while ((len = input.read(b)) != -1) {
bos.write(b, 0, len);
}
System.out.println(new String(bos.toByteArray()));
bos.close();
input.close();
참고사항:
WosClient.getObject가 반환하는 WosObject 인스턴스에는 버킷명, 오브젝트 키, 오브젝트 메타데이터, 오브젝트 입력 스트림 등이 포함되어 있습니다.중요:
WosObject.getObjectContent로 가져온 입력 스트림은 반드시 명시적으로 close해야 하며, 그렇지 않으면 리소스 누수가 발생할 수 있습니다.
오브젝트의 일부만 다운로드해야 할 경우, 범위 다운로드를 통해 원하는 데이터 영역만 받을 수 있습니다. 예를 들어 0~1000 범위를 지정하면 0부터 1000번째 바이트(총 1001바이트)를 반환합니다. 범위가 유효하지 않으면 전체 데이터가 반환됩니다.
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient 인스턴스 생성
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
GetObjectRequest request = new GetObjectRequest("bucketname", "objectname");
// 범위 시작과 끝 지정
request.setRangeStart(0L);
request.setRangeEnd(1000L);
WosObject wosObject = wosClient.getObject(request);
// 데이터 읽기
byte[] buf = new byte[1024];
InputStream in = wosObject.getObjectContent();
for (int n = 0; n != -1;) {
n = in.read(buf, 0, buf.length);
}
in.close();
참고사항:
ConcurrentDownloadObjectSample을 참고하세요.오브젝트 다운로드 시 조건을 지정할 수 있으며, 지정 조건을 만족하지 않으면 예외가 발생하여 다운로드가 실패합니다.
사용 가능한 조건 파라미터는 아래와 같습니다:
| 파라미터 | 설명 | Java SDK 메서드 |
|---|---|---|
| If-Modified-Since | 지정한 날짜 이후 오브젝트가 수정된 경우에만 반환하며, 아니면 예외가 발생합니다. | GetObjectRequest.setIfModifiedSince |
| If-Unmodified-Since | 지정한 날짜 이후로 오브젝트가 수정되지 않았을 경우에만 반환, 아니면 예외가 발생합니다. | GetObjectRequest.setIfUnmodifiedSince |
| If-Match | 오브젝트의 ETag와 일치해야만 반환, 아니면 예외가 발생합니다. | GetObjectRequest.setIfMatchTag |
| If-None-Match | 오브젝트의 ETag와 다를 경우에만 반환, 아니면 예외가 발생합니다. | GetObjectRequest.setIfNoneMatchTag |
참고사항:
412 Precondition Failed가 반환됩니다.304 Not Modified가 반환됩니다.String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient 인스턴스 생성
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
GetObjectRequest request = new GetObjectRequest("bucketname", "objectname");
request.setRangeStart(0L);
request.setRangeEnd(1000L);
request.setIfModifiedSince(new SimpleDateFormat("yyyy-MM-dd").parse("2016-01-01"));
WosObject wosObject = wosClient.getObject(request);
wosObject.getObjectContent().close();
오브젝트 다운로드 시 일부 HTTP/HTTPS 응답 헤더를 재정의할 수 있습니다. 재정의 가능한 헤더는 아래와 같습니다.
| 파라미터 | 설명 | Java SDK 메서드 |
|---|---|---|
| contentType | Content-Type 헤더 재정의 | ObjectRepleaceMetadata.setContentType |
| contentLanguage | Content-Language 헤더 재정의 | ObjectRepleaceMetadata.setContentLanguage |
| expires | Expires 헤더 재정의 | ObjectRepleaceMetadata.setExpires |
| cacheControl | Cache-Control 헤더 재정의 | ObjectRepleaceMetadata.setCacheControl |
| contentDisposition | Content-Disposition 헤더 재정의 | ObjectRepleaceMetadata.setContentDisposition |
| contentEncoding | Content-Encoding 헤더 재정의 | ObjectRepleaceMetadata.setContentEncoding |
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient 인스턴스 생성
WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
GetObjectRequest request = new GetObjectRequest("bucketname", "objectname");
ObjectRepleaceMetadata replaceMetadata = new ObjectRepleaceMetadata();
replaceMetadata.setContentType("image/jpeg");
request.setReplaceMetadata(replaceMetadata);
WosObject wosObject = wosClient.getObject(request);
System.out.println(wosObject.getMetadata().getContentType());
wosObject.getObjectContent().close();
오브젝트 다운로드 시 사용자 정의 메타데이터를 확인할 수 있습니다. 아래 코드는 사용자 정의 메타데이터 접근 방법을 보여줍니다.
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient 인스턴스 생성
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
// 사용자 정의 메타데이터와 함께 오브젝트 업로드
PutObjectRequest request = new PutObjectRequest("bucketname", "objectname");
ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata("property", "property-value");
request.setMetadata(metadata);
wosClient.putObject(request);
// 오브젝트 다운로드 및 사용자 정의 메타데이터 확인
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
System.out.println(wosObject.getMetadata().getUserMetadata("property"));
wosObject.getObjectContent().close();
아카이브 스토리지 클래스에 저장된 오브젝트를 다운로드하려면 먼저 WosClient.restoreObject로 복원해야 합니다. 아래는 아카이브 오브젝트를 다운로드하는 방법입니다.
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient 인스턴스 생성
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
RestoreObjectRequest request = new RestoreObjectRequest();
request.setBucketName("bucketname");
request.setObjectKey("objectname");
request.setDays(1);
wosClient.restoreObject(request);
// 오브젝트 복원이 완료되기를 대기
Thread.sleep(60 * 6 * 1000);
// 오브젝트 다운로드
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
wosObject.getObjectContent().close();
참고사항:
WosClient.restoreObject로 지정한 오브젝트는 반드시 아카이브 스토리지 클래스여야 하며, 그렇지 않으면 예외가 발생합니다.