본문으로 건너뛰기

Object_File & Folder

Object:File&Folder API를 사용하여 파일/폴더의 생성과 관련 정보 및 정책을 관리할 수 있습니다.

API 사용 준비

API를 호출하기 위해 필요한 사전 작업은 API 사용 준비 문서를 참고하시기 바랍니다.

API 엔드포인트 URL

API 요청을 위한 Object Storage API 엔드포인트 URL은 다음과 같습니다.

Object_File & Folder API 엔드포인트 URL 형식
https://objectstorage.kr-central-2.kakaocloud.com
지원 사양

Object REST-API는 Openstack의 Swift API 사양을 지원합니다.

Object REST-APISwift API 사양
Account      버킷 계정
Container버킷 이름
Object폴더(Folder)와 파일(File)
- 폴더 예시: images/small
- 파일 예시: image/small/icon.jpg

폴더 생성

Owner, Read-Write 권한이 있는 사용자는 버킷 안에 폴더를 생성할 수 있습니다.

Request Syntax
폴더 생성 Request Syntax
curl --location --request PUT 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/directory' \
--header 'X-Object-Meta-Company: kakao enterprise'
API 호출 방식
메서드요청 URL
PUT   https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/directory로 고정
X-Object-Meta-{key_name}String선택버킷 메타 정보로, 사용자가 지정할 메타 데이터 이름을 {key_name}에 입력
- Swift API의 경우, 해당 prefix 적용
X-Object-Meta-{key_name}String선택버킷 메타 정보로, 사용자가 지정할 메타 데이터 이름을 {key_name}에 입력
- S3 API의 경우, 해당 prefix 적용
Response Syntax
상태 코드
HTTP Status응답 내용설명
201     Created성공
401Unauthorized인증 실패
403Forbidden권한 없음

파일 생성 및 업로드

Owner, Read-Write 권한이 있는 사용자는 버킷 안에 파일을 생성하거나 업로드할 수 있습니다.

Request Syntax
파일 생성 및 업로드 Request Syntax
curl --location --request PUT 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}/{file}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: text/plain' \
--data-raw '{Content}'
API 호출 방식
메서드요청 URL
PUT   https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}/{file}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
fileString필수  파일명
- 예시: icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString선택Put(업로드)하는 오브젝트가 파일인 경우 mime type 문자열을 입력
- 콘텐츠 유형을 입력하지 않은 Put(업로드) 경우, Object Storage 내부적으로 현재 업로드하는 파일의 유형을 application/octet-stream으로 처리
X-Object-Meta-{name}String선택버킷 메타 정보로, 사용자가 지정할 메타 데이터 이름을 {name}에 입력
Content-Lengthint선택콘텐츠 길이
Transfer-EncodingString선택인코딩 방식
- chunked : 데이터가 일련의 청크 내에서 분할하여 전송하는 방식으로, chunked 값이 지정된 경우는 Content-Length Header는 전송되면 안 됨
- compress : LZW 알고리즘을 사용하는 압축 방식
- deflate : deflate 알고리즘을 사용하는 압축 방식
- gzip : LZ77 알고리즘을 사용하는 압축 방식
- identity : 압축이나 수정이 없는 전송 방식

Request body Elements

Request유형필수 여부설명
ContentRaw data필수  파일의 콘텐츠
Response Syntax
상태 코드
HTTP Status응답 내용설명
201     Created성공
401Unauthorized인증 실패
403Forbidden권한 없음

대용량 파일 업로드

HTTP 프로토콜은 연결 유지 기능이 없기 때문에 TCP 연결이 끊어지면 데이터 전송이 끝납니다. 따라서 대용량의 파일을 한 번의 Connection으로 업로드 시, Connection이 불안하거나 접속이 끊어진 경우에는 업로드가 중단될 수 있습니다. KakaoCloud Object Storage에서는 대용량 파일을 업로드하기 위해 다음의 대용량 오브젝트(Large Object) 업로드 방식을 지원합니다.

주의
  • kr-central-2의 암호화 버킷에서는 사용할 수 없습니다.
  • 같은 이름의 파일이지만 다른 용량의 파일을 덮어쓰기로 업로드 시, 세그먼트 파일이 남아 있을 수 있습니다.
  • 객체 조회를 통해 남아 있는 세그먼트 파일을 삭제하시길 권장합니다.

대용량 오브젝트(Large Object) 업로드 방식

방식설명
DLO(Dynamic Large Object)분할된 Segment Object가 하나의 단일 Large Object로 인식되도록 함
- Swift 프로토콜
SLO(Static Large Object)Segment를 분할해 업로드하지만, Segment Naming 제약이 없고 사이즈가 동일하지 않아도 됨
- Swift 프로토콜

DLO(Dynamic Large Object) 방식

DLO 방식은 나누어진 Segment Object가 하나의 단일 Large Object로 인식될 수 있도록 합니다. 또한, 각 Segment Object의 integrity를 보장하지 않습니다. 다운로드(GET) 시, 사용자는 Manifest Object 다운로드 요청을 합니다. 그리고 Object Storage 서버에서는 Manifest Object에 입력된 X-Object-Manifest를 인지하고, Segment Object를 단일 대용량 오브젝트로 인식될 수 있게 합니다.

  1. 하나의 단일 대용량 오브젝트(Large Object)를 일정한 크기로 분할(Segment)합니다.
  2. 분할한 오브젝트를 Object Manifest 하위에 업로드합니다.
  3. X-Object-Manifest 헤더의 항목이 기입된 Manifest Object 업로드합니다. 이때 Manifest Object를 먼저 업로드할 수 있습니다.
DLO Segment Object 업로드
Request Syntax
DLO Segment Object 업로드 Request Syntax
curl --location --request PUT 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}/{Segment Objects...}' \
--header 'X-Auth-Token: {x-auth-token}' \
--data-raw '{segment_content}'
DLO Segment Object 업로드
curl -X PUT -H 'X-Auth-Token: <token>' https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/test-bucket/DLO/00000001 --data-binary '1'
curl -X PUT -H 'X-Auth-Token: <token>' https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/test-bucket/DLO/00000002 --data-binary '2'
curl -X PUT -H 'X-Auth-Token: <token>' https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/test-bucket/DLO/00000003 --data-binary '3'
API 호출 방식
메서드URL
PUT     https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}/{Segment Objects…}
Path유형필수 여부설명
region_nameString필수kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
DLO Manifest ObjectString필수  Manifest Object 이름
Segment Objects…String필수  다수의 Segment Objects 업로드 가능
- 오름차순 Sequence Number Naming 필요함 (예시: segment_0001 ... segment_0002 )
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Request Elements
Request유형필수 여부설명
segment_contentData-raw필수  segment object의 콘텐츠
Response Syntax
상태 코드
HTTP Status응답 내용설명
201     Created   성공
DLO Manifest Object 업로드
Request Syntax
DLO Manifest 업로드 Request Syntax
curl --location --request PUT 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'X-Object-Manifest: {bucket_name}/{DLO Manifest Object}' \
DLO Manifest Object 업로드 예제
curl -X PUT -H 'X-Auth-Token: <token>' -H 'X-Object-Manifest: test-bucket/DLO' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/test-bucket/DLO --data-binary ''
API 호출 방식
메서드URL
PUT
(Segment된 Object를 업로드)
https:/objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}/{Segment Object…}
PUT
(Manifest Object 자체를 업로드)
https:/objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}
Path유형필수 여부설명
region_nameString필수kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
DLO Manifest ObjectString필수  Manifest Object 이름
Segment Object…String필수  다수의 Segment Objects 업로드 가능
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
X-Object-ManifestString필수  분할한 Segment Objects를 업로드한 경로
- {bucket_name}/{DLO Manifest Object} 형식
Response Syntax
상태 코드
HTTP Status응답 내용설명
201     Created   성공
DLO 다운로드
Request Syntax
LO 다운로드 Request Syntax
curl --location --request GET 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}' \
--header 'X-Auth-Token: {x-auth-token}' \
DLO 다운로드 예제
curl -H 'X-Auth-Token: <token>' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/test-bucket/DLO
API 호출 방식
메서드URL
PUT     https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{DLO Manifest Object}
Path유형필수 여부설명
region_nameString필수kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
DLO Manifest ObjectString필수  Manifest Object 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
상태 코드
HTTP Status응답 내용설명
201    Created   성공

SLO(Static Large Object) 방식

SLO 방식은 DLO와 동일하게 Segment를 분할해 업로드하지만, Segment Naming 제약이 없고 사이즈가 동일하지 않아도 된다는 차이점이 있습니다. 또한, Manifest를 제일 마지막에 업로드해야 합니다. SLO Manifest Object는 Segment Object 목록을 순서대로 작성하여 입력해야 합니다. 현재 KC Object Storage에서는 최대 1,000개의 Segment Object를 하나의 Manifest에 입력할 수 있습니다.

SLO Manifest Object 생성 요청을 하면 각 Segment Object가 입력된 경로에 있는지, etag Value와 Segment object Size가 일치하는지 확인합니다. 정보가 일치하지 않으면 Manifest Object가 생성되지 않습니다. 또한, Manifest에 etag를 통해 Segment Object의 무결성을 보장합니다.

  1. 하나의 단일 대용량 오브젝트(Large Object)를 사용자가 원하는 크기로 분할(Segment)합니다.
  2. 각 Segment를 접근 권한이 있는 버킷에 업로드합니다. 동일한 버킷이 아니어도 되나, 접근 권한이 있는 프로젝트(account) 버킷이어야 합니다.
  3. 위의 업로드된 Segment 오브젝트의 Path, Etag, Size가 기록된 Manifest를 Body로 입력하여, SLO Manifest Object를 업로드합니다.
안내

Manifest에 대한 자세한 예제는 https://objectstorage.kr-central-1.kakaocloud.com/info에서 참고하시기 바랍니다.

SLO Segment Object 업로드

Request Syntax
SLO Segment 업로드 Request Syntax
curl --location --request PUT 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}/{segment_object}' \
--header 'X-Auth-Token: {x-auth-token}' \
--data-raw '{segment_content}'
SLO Segment Object 업로드 예제
curl -X PUT -H 'X-Auth-Token: <token>' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/test-bucket/slo_test_1.txt --data-binary '@./slo_test_1.txt'
curl -X PUT -H 'X-Auth-Token: <token>' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/other-bucket/slo_test_2.txt --data-binary '@./slo_test_2.txt'
curl -X PUT -H 'X-Auth-Token: <token>' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/other1-bucket/slo_test_3.txt --data-binary '@./slo_test_3.txt'
API 호출 방식
메서드URL
PUT    https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}/{segment_object}
Path유형필수 여부설명
region_nameString필수kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수Segment Object를 업로드한 경로
segment_objectString필수  Segment Object 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Request Elements
Request유형필수 여부설명
segment_contentRaw-data필수  segment Object의 콘텐츠
Response Syntax
상태 코드
HTTP Status응답 내용설명
201    Created  성공

SLO Manifest 업로드

Request Syntax
SLO Manifest 업로드 Request Syntax
curl --location --request PUT 'https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{SLO Manifest Object}?multipart-manifest=put' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: "application/json"' \
--data '[ \
{
"path": "{path}/{Segment Object}",
"etag": "{Segment Object의 etag 값}",
"size_bytes": "{Segment Object Size}"
},
....
]
}'
SLO Manifest Object 업로드 예제
curl -X PUT -H 'X-Auth-Token: <token>' -H 'Content-Type: application/json' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/bucket/SLO?multipart-manifest=put 
--data
'
[
{
"path": "test-bucket/slo_test_1.txt",
"etag": "ba1f2511fc30423bdbb183fe33f3dd0f",
"size_bytes": 4
},
{
"path": "other-bucket/slo_test_2.txt",
"etag": "441295deac01cf5d6bdc7db3173adfdf",
"size_bytes": 1369
},
{
"path": "other1-bucket/slo_test_3.txt",
"etag": "aa3f5bb8c988fa9b75a1cdb1dc4d93fc",
"size_bytes": 4
}
]
'
API 호출 방식
메서드URL
PUT   https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{SLO Manifest Object}?multipart-manifest=put
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
SLO Manifest ObjectString필수  Manifest Object 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  콘텐츠의 유형
Request Elements
Request유형필수 여부설명
pathString필수  {path}/{Segment Object} 형식으로 입력
- {path}: Object를 업로드할 경로
- {Segment Object}: path 하위의 Segment object
etagString선택Segment Object의 etag 값
size_bytesInt선택Segment Object 사이즈
안내

Manifest PUT 시 etagsize_bytes를 입력한 후, 기존의 업로드된 segment object의 etagsize_bytes 값을 비교하여 일치하지 않을 시 오류를 발생시킴

Response Syntax
상태 코드
HTTP Status응답 내용설명
201    Created  성공

SLO 다운로드

Request Syntax
SLO 다운로드 Request Syntax
curl --location --request GET 'https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{SLO Manifest Object}' \
--header 'X-Auth-Token: {x-auth-token}' \
SLO 다운로드 예제
curl -H 'X-Auth-Token: <token>' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/bucket/SLO
API 호출 방식
메서드URL
PUT   https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{SLO Manifest Object}
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
SLO Manifest ObjectString필수  Manifest Object 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
상태 코드
HTTP Status응답 내용설명
201     Created  성공

SLO Manifest 다운로드

SLO는 SLO Manifest Object만 별도로 다운로드를 할 수 있습니다. query param으로 multipart-manifest=get을 요청하면, manifest만 다운로드할 수 있습니다

Request Syntax
SLO Manifest 다운로드 Request Syntax
curl --location --request GET 'https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{SLO Manifest Object}?multipart-manifest=get' \
--header 'X-Auth-Token: {x-auth-token}' \
SLO Manifest Object 다운로드 예제
curl -H 'X-Auth-Token: <token>' https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/test-bucket/SLO?multipart-manifest=get
API 호출 방식
메서드URL
PUT   https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{SLO Manifest Object}?multipart-manifest=get
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
SLO Manifest ObjectString필수  Manifest Object 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
상태 코드
HTTP Status응답 내용설명
201    Created  성공

멀티 파트 업로드

  • OpenStack Swift Object API의 Multipart-upload API 확장 기능을 제공합니다. 이를 통해 S3 Multipart-upload API와 유사한 방식으로 대용량 파일을 업로드할 수 있습니다.
  • S3 Multipart-upload API는 AWS에서 제공하는 기능으로, 파일을 여러 조각으로 분할해서 업로드하고, 다시 조합하는 방식으로 대용량 파일을 업로드하는 기능입니다. S3 Multipart-upload API에 대한 자세한 내용은 S3 멀티 파트 업로드 API 문서를 참조하시기 바랍니다.
  • Object Storage에서는 Swift SLO(static large object), DLO(dynamic large object) API를 지원하지 않습니다.

멀티 파트 업로드는 다음 3단계로 구성됩니다.

Step 1. 멀티 파트 업로드 생성


Request Syntax
멀티 파트 업로드 생성 Request Syntax
curl --location --request POST 'https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?uploads' \
--header 'X-Auth-Token: {x-auth-token}'
API 호출 방식
메서드요청 URL
POST   https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?uploads
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
멀티파트 업로드 생성 Response Syntax
<?xml version="1.0" encoding="UTF-8"?>
<InitiateMultipartUploadResult>
<Tenant>{tenant-id}</Tenant>
<Bucket>{bucket-name}</Bucket>
<Key>{object-path}</Key>
<UploadId>{upload-id}</UploadId>
</InitiateMultipartUploadResult>
Response Elements
Response유형설명
tenant-idString프로젝트 ID
bucket-nameString버킷 이름
object-pathString파일 경로
upload-idString서버에서 할당된 Large Object의 고유 ID
상태 코드
HTTP Status응답 내용설명
201Created성공
401Unauthorized인증 실패
403Forbidden권한 없음

Step 2. 부분 파트 업로드

부분 파트가 5MB 이상이어야 업로드가 가능합니다.

Request Syntax
부분 파트 업로드 Request Syntax
curl --location --request PUT 'https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?uploadId={upload-id}&partNumber={part-number}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/octet-stream' \
--data '{path_name}'
API 호출 방식
메서드요청 URL
PUT   https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?uploadId={upload-id}&partNumber={part-number}
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Query
Request유형필수 여부설명
uploadIdQuery필수  CreateMultipartUpload에서 반환된 large object의 고유 upload id
partNumberQuery필수  현재 업로드하는 부분 파일의 large object 상 부분 순번 (1~10000)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Header
Response유형설명
etagString현재 업로드한 부분 파일의 etag
상태 코드
HTTP Status응답 내용설명
200     Created   성공
401Unauthorized인증 실패
403Forbidden권한 없음

Step 3. 멀티 파트 업로드 완료


Request Syntax
멀티 파트 업로드 완료 Request Syntax
curl --location --request PUT 'https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?uploadId={upload-id}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/xml' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUpload>
<Part>
<ETag>"<etag of 5MB_1.file>"</ETag>
<PartNumber>1</PartNumber>
</Part>
<Part>
<ETag>"<etag of 5MB_2.file>"</ETag>
<PartNumber>2</PartNumber>
</Part>
<Part>
<ETag>"<etag of remain.file>"</ETag>
<PartNumber>3</PartNumber>
</Part>
</CompleteMultipartUpload>'
API 호출 방식
메서드요청 URL
PUT    https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?uploadId={upload-id}
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Query
Request유형필수 여부설명
uploadIdQuery필수  CreateMultipartUpload에서 반환된 large object의 고유 upload id
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Elements
Response유형설명
ETagString현재 업로드한 부분 파일의 ETag
PartNumberInteger현재 업로드한 부분 파일의 번호
상태 코드
HTTP Status응답 내용설명
201Created성공
401Unauthorized인증 실패
403Forbidden권한 없음

Object 관리

Object Meta 조회

Owner, Read-Only, Read-Write 권한이 있는 사용자는 버킷에 대해 조회할 수 있습니다. 버킷에 저장된 오브젝트(파일, 폴더) Meta 데이터를 제공합니다.

Request Syntax
Object Meta 조회 Request Syntax
curl --location --request HEAD 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}'
API 호출 방식
메서드요청 URL
HEAD  https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
상태 코드
HTTP Status응답 내용설명
200Success성공
401Unauthorized인증 실패
403Forbidden권한 없음

Object Meta 변경

Owner, Read-Write 권한이 있는 사용자는 버킷에 대해 변경할 수 있습니다.
버킷에 저장된 오브젝트(파일, 폴더)의 메타 데이터를 변경합니다.

Request Syntax
Object Meta 변경 Request Syntax
curl --location --request POST 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'X-Object-Meta-Company: kakao enterprise'
API 호출 방식
메서드요청 URL
POST   https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
X-Object-Meta-{name}String선택버킷 메타 정보로, 사용자가 지정할 메타 데이터 이름을 {name}에 입력
Response Syntax
상태 코드
HTTPS Status응답 내용설명
200     Success성공
401Unauthorized인증 실패
403Forbidden권한 없음

Object 목록 조회

Owner, Read-Write, Read-Only 권한이 있는 사용자는 버킷에 대해 조회할 수 있습니다. 버킷에 저장된 오브젝트(파일, 폴더) 목록을 조회합니다.

Request Syntax
Object 목록 조회 Request Syntax
curl --location --request GET 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}?format=json' \
--header 'X-Auth-Token: {x-auth-token}'
API 호출 방식
메서드요청 URL
GET  https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Request Query
Request유형필수 여부설명
prefixQuery선택Directory path
- 예시: image/small
delimiterQuery선택delimiter를 key로 사용할 경우에는 / 입력 필요
limitQuery선택목록 개수
- 기본값: 1000 (최대 1,000개 까지 조회 가능)
markerQuery선택검색 조건
- (Object name > Marker )
formatQuery선택response 받을 포맷
- plain(기본값)
- json
- xml
Response Syntax
JSON ObjectList
{
name: String
content_type: String
bytes: int
hash: String
last_modified: String // 최종 수정일시 RFC3339 예시: 2020-07-01T00:00:00Z
subdir: String // pseudo-directory인 경우 이 값만 제공
}
Object 목록 조회 Response Syntax
[
{
"name": "document",
"content_type": "application/directory",
"bytes": 0,
"hash": "d41d8cd98f00b204e9800998ecf8427e",
"last_modified": "2020-06-26T11:12:03+09:00"
},
{
"name": "document/hello.txt",
"content_type": "application/octet-stream",
"bytes": 7,
"hash": "083d9fe8506415ba02f2f86e0531527f",
"last_modified": "2020-06-26T11:14:50+09:00"
}
]
Response Elements
Response유형설명
nameString오브젝트 이름
content_typeString해당 오브젝트를 PUT할 때 입력받았던 Content-Type 값이 반환
- 유형: directory / 이미지 / 구분 바이너리 등
bytesint오브젝트 크기
hashString파일 고유값
last_modifiedString최종 수정일시
- 형식: RFC3339 - 예시: 2020-07-01T00:00:00Z
subdirStringpseudo-directory인 경우 이 값만 제공됨
상태 코드
HTTPS Status응답 내용설명
200     OK성공
401Unauthorized인증 실패
403Forbidden권한 없음

Object 다운로드

Owner, Read-Write, Read-Only 권한이 있는 사용자는 버킷의 오브젝트를 다운로드할 수 있습니다.
Path가 Folder인 경우, 사이즈가 0인 Content를 응답받습니다. Folder의 하부 목록을 조회하기 위해서는 Object 목록 조회 API를 사용해야 합니다.

Request Syntax
Object 다운로드 Request Syntax
curl --location --request GET 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}'
API 호출 방식
메서드요청 URL
GET  https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/:path
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
Object 다운로드 Response Syntax
{
Content-Length (Header)
Content-Type (Header)
Last-Modified (Header)
ETag (Header)
Content (Body)
}
Response Header
Response유형설명
Content-Lengthint오브젝트의 크기 값
- 파일인 경우 파일 크기 값이 전달됨
- 폴더인 경우에는 메타 정보만 있어 0 값이 전달됨
Content-TypeString콘텐츠의 유형
Last-ModifiedString최종 수정일시
ETagStringETag는 바이너리에 대한 MD5 해쉬값으로 바이너리가 존재하지 않는 폴더의 경우에는 의미 없는 값을 전달됨
Response Elements
Response유형설명
ContentRaw data콘텐츠 유형이 폴더인 경우 전달 안 됨
상태 코드
상태 코드응답 내용설명
200OK성공
401Unauthorized권한 없음
404Not foundFile not found

Object 삭제

Owner, Read-Write 권한이 있는 사용자는 버킷의 오브젝트를 삭제할 수 있습니다.

Request Syntax
Object 삭제 Request Syntax
curl --location --request DELETE 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}'
API 호출 방식
메서드요청 URL
DELETEhttps://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Response Syntax
상태 코드
HTTPS Status응답 내용설명
204     No Content성공
401Unauthorized권한 없음
404Not foundFile not found

Object 복사

복사할 오브젝트에 대한 읽기 권한과 복사될 오브젝트에 대한 쓰기 권한(Read-Write 권한)이 있어야 합니다.

Request Syntax
Object 복사 Request Syntax
curl --location --request COPY 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Destination: /{target-bucket-name}/{target-path}'
API 호출 방식
메서드요청 URL
COPYhttps://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
DestinationString필수  복사할 목적지의 경로명
- 예시: {target-bucket-name}/{target-path}
Response Syntax
상태 코드
HTTPS Status응답 내용설명
201     Created   성공
401Unauthorized권한 없음
404Not foundFile not found

Object 이동

이동할 오브젝트를 포함하는 버킷의 storage.objects.get 권한과 이동될 오브젝트를 포함하는 버킷의 storage.objects.create 권한이 있어야 합니다.

kr-central-2 암호화 버킷에서는 사용할 수 없습니다.

Request Syntax
Object 이동 Request Syntax
curl --location --request MOVE 'https://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{path}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Destination: /{target-bucket-name}/{target-path}'
API 호출 방식
메서드요청 URL
MOVEhttps://objectstorage.kr-central-1.kakaocloud.com/v1/{account}/{bucket_name}/{path}
Path유형필수 여부설명
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
DestinationString필수  이동할 목적지의 경로
- 예시: {target-bucket-name}/{target-path}
Response Syntax
상태 코드
HTTPS Status응답 내용설명
201Created성공
401Unauthorized권한 없음
404Not foundFile not found

Object 다운로드용 Temp URL 생성

오브젝트에 대한 접근 권한이 있는 사용자는 특정 기간 유효한 다운로드용 Temp URL을 생성합니다. temp_url_expires는 유효 시간으로 사용자가 지정한 시간까지 다운로드 받을 수 있도록 설정합니다.

Request Syntax
Object 다운로드용 Temp URL 생성 Request Syntax
curl --location --request GET 'https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?temp_url&temp_url_expires={temp_url_expires}' \
--header 'X-Auth-Token: {x-auth-token}'
API 호출 방식
메서드요청 URL
GET  https://objectstorage.kr-central-2.kakaocloud.com/v1/{account}/{bucket_name}/{path}?temp_url&temp_url_expires={temp_url_expires}
Path유형필수 여부설명
accountstring필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_namestring필수  버킷 이름
pathstring필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Request Query
Request유형필수 여부설명
temp_urlString필수  TempUrl 발급 요청을 나타내는 키
temp_url_expirestimestamp필수  발급된 TempUrl의 유효시간
- sec 단위
Response Syntax
Object 다운로드용 Temp URL 생성 Response
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Thu, 09 Mar 2023 04:44:00 GMT
Content-Length: 209

{
"url": "/v1/{project_id}/object-reg-test-1/test.txt?temp_url_sig={temp_url_sig}&temp_url_expires={temp_url_expires}",
"sig": "{sig}"
}
Response Elements
Response유형설명
urlstring해당 오브젝트를 expire 시간 안에 다운로드 받을 수 있는 임시 URL
sigstring해당 URL의 signature이며 object의 expire 시간 안에서 유효한 signature
상태 코드
HTTPS Status응답 내용설명
200      Unauthorized인증 실패
403Forbidden권한 없음
404Not found버킷이 없음

Temp URL을 사용한 Object 다운로드

생성된 Temp URL을 사용하면 발급 시 신청한 유효 시간 동안 해당 오브젝트를 다운로드할 수 있습니다. Temp URL을 사용할 경우, X-Auth-Token 없이 다운로드받을 수 있으므로 Temp URL의 발급자는 신뢰할 수 있는 사용자에게 전달해야 합니다.

Request Syntax
Temp URL을 사용한 Object 다운로드 Request Syntax
curl --location --request GET 'https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}?temp_url_sig={temp_url_sig}&temp_url_expires={temp_url_expires}'
API 호출 방식
메서드요청 URL
GET  https://objectstorage.{region_name}.kakaocloud.com/v1/{account}/{bucket_name}/{path}?temp_url_sig=value&temp_url_expires={temp_url_sig}&filename={temp_url_expires}
Path유형필수 여부설명
region_nameString필수  리전 명 : kr-central-1 또는 kr-central-2
accountString필수  프로젝트 ID
- 토큰 발급 시 확인 가능 (토큰 발급 과정에서 사용/확인된 프로젝트 ID)
- Swift API에서 Account 값으로 사용
bucket_nameString필수  버킷 이름
pathString필수  폴더 전체 경로
- 예시: image/small, images/small/icon.jpg
Request Query
Request유형필수 여부설명
temp_url_sigQuery필수  발급받은 Temp URL Response의 signature 정보
temp_url_expiresQuery필수  발급받은 Temp URL Response의 유효시간 정보
- 단위: Unix epoch time
filenameQuery선택오브젝트를 브라우저에서 다운로드받을 때 사용할 custom 파일명
- utf-8 percent encoding된 문자열
Response Syntax
Temp URL을 사용한 Object 다운로드 Response Syntax
{
Content-Length (Header)
Content-Type (Header)
Last-Modified (Header)
ETag (Header)
Content-Disposition (Header)
Content (Body)
}
Response Header
Response유형설명
Content-Lengthint오브젝트의 크기값
- 파일인 경우 파일 크기값이 전달됨
- 폴더인 경우에는 메타 정보만 있어 0값이 전달됨
Content-TypeString미디어 유형
Last-ModifiedString최종 수정일시
ETagStringETag는 바이너리에 대한 MD5 해쉬값으로, 바이너리가 존재하지 않는 폴더의 경우에는 의미 없는 값을 전달됨
Content-DispositionStringObject 다운로드 시 브라우저가 로컬에 저장할 파일명
- 기본값: Object Name
- utf-8 percent encoding된 문자열이 전달됨
Response Elements
Response유형설명
ContentBody콘텐츠 유형이 폴더인 경우 전달 안 됨
상태 코드
HTTPS Status응답 내용설명
200      Success성공
403ForbiddenTemp URL의 유효시간 만료