최신 업데이트:2025-08-18 15:33:46
이 문서는 오브젝트 스토리지 서비스의 데이터 응답 및 콜백 메커니즘에 대한 포괄적인 가이드로, 다음 세 가지 핵심 서브시스템을 다룹니다.
returnBody 반환 메커니즘returnBody와 returnUrl로 지정된 요청 URL 반환예시:
bucket: image
key: 205.jpg
returnBody: bucket=$(bucket)&key=$(key)
returnUrl: http://www.abc.com
업로더에게 반환되는 내용:
http://www.abc.com?bucket=image&key=205.jpg&hash=610d0284a0923298247d3a269ee28908cdcc7476
returnBody 지정, returnUrl 미지정 시, returnBody로 지정한 내용을 반환returnBody를 사용하면 클라이언트로 반환되는 정보를 자유롭게 커스터마이징할 수 있습니다. 현재 커스텀 치환 변수와 지정 치환 변수의 두 가지 파라미터 방식을 지원하며, 혼합 사용도 가능합니다.
참고:
- 일반 업로드 시 returnBody에는 기본적으로 파일의 해시값이 포함됩니다. 멀티파트 업로드 시에는 해시값과 key가 기본 반환됩니다.
- 설정 후
returnBody로 반환되는 내용은 URL-safe Base64로 인코딩됩니다. 아래 예시는 디코딩된 내용입니다.
커스텀 치환 변수
$(x:variable) ReturnBody: position=$(x:position)&message=$(x:message)
Request Parameter: position=abc&message=Success
일반 업로드에서 업로더로 반환되는 내용:
position=abc&message=Success&hash=610d0284a0923298247d3a269ee28908cdcc7476
멀티파트 업로드에서 업로더로 반환되는 내용:
{
"position":"abc",
"message":"Success",
"key":"filename",
"hash":"610d0284a0923298247d3a269ee28908cdcc7476"
}
참고: 커스텀 변수는 반드시 UTF-8 형식이어야 하며, & 기호를 포함할 수 없습니다. 포함 시 인코딩 오류가 발생합니다.
특수 치환 변수
$(variable) returnBody:url=$(url)&fsize=$(fsize)&bucket=$(bucket)
url=http://abc.com/1.jpg
fsize=1231341
bucket=test
일반 업로드 시 업로더로 반환되는 내용:
url=http://abc.com/1.jpg&fsize=1231341&bucket=test&hash=610d0284a0923298247d3a269ee28908cdcc7476
멀티파트 업로드 시 업로더로 반환되는 내용:
{
"url":"http://abc.com/1.jpg",
"fsize":"1231341",
"bucket":"test",
"key":"1.jpg",
"hash":"610d0284a0923298247d3a269ee28908cdcc7476"
}
참고: 파라미터의 나열 순서는 반환 값의 결과 순서와 동일합니다.
| 지정 변수 | 설명 | 업로드 인터페이스 |
|---|---|---|
| $(persistentID) | 업로드 전처리 또는 영구 처리 트리거의 프로세스 ID | 일반 업로드(멀티파트 업로드 시 제한적 사용) |
| $(bucket) | 대상 버킷명 추출 | 일반 업로드/멀티파트 업로드 |
| $(key) | 버킷에 저장되는 파일 이름 | 일반 업로드/멀티파트 업로드 |
| $(fname) | 원본 파일 이름 | 일반 업로드/멀티파트 업로드 |
| $(hash) | 리소스의 Etag | 일반 업로드/멀티파트 업로드 |
| $(fsize) | 리소스 크기(바이트 단위) | 일반 업로드/멀티파트 업로드 |
| $(url) | 리소스 접근 경로 | 일반 업로드/멀티파트 업로드 |
| $(ip) | 요청의 소스 IP | 일반 업로드/멀티파트 업로드 |
| $(imageInfo) | 업로드 이미지 기본 정보 | 일반 업로드/멀티파트 업로드 |
| $(exif) | 업로드 이미지의 Exif 정보 | 일반 업로드/멀티파트 업로드 |
| $(avinfo) | JSON 형식의 동영상 메타데이터, URL-safe Base64 인코딩됨 | 일반 업로드/멀티파트 업로드 |
| $(mimeType) | 리소스 타입(예: JPG 이미지의 경우 image/jpg) | 일반 업로드/멀티파트 업로드 |
callbackBody 콜백 메커니즘callbackBody는 callbackUrl이 활성화된 경우, 클라이언트에 반환되는 정보를 포맷커스터마이징할 때 사용되며, 서버에 콜백을 호출합니다.
참고: 콜백 내용은 URLEncode로 인코딩되어 전달되며, 콜백 서버에서 수신 후 디코딩 처리가 가능합니다.
callbackBody는 정수, 커스텀 치환 변수, 지정 치환 변수를 모두 지원하며, 조합하여 사용할 수 있습니다.
정수
key1=value1&key2=value2callbackUrl로 연동합니다.username=john&age=21
커스텀 치환 변수
$(x:variable) callbackBody: position=$(x:position)&message=$(x:message)
$(x:position)=abc, $(x:message)=Success 이면 콜백 서버에 전달되는 값은 다음과 같습니다.
position%3dabc%26message%3dSuccess%0a%0a
참고: 커스텀 변수는 UTF-8 형식이어야 하고 & 불허(포함 시 인코딩 오류).
특수 치환 변수
$(variable) callbackBody: url=$(url)&fsize=$(fsize)&bucket=$(bucket)
url=http://abc.com/1.jpg
fsize=1231341
bucket=test
콜백 서버로 반환되는 값(URLEncode 인코딩):
url%3daHR0cDovL2FiYy5jb20vMS5qcGc%3d%26fisize%3d1231341%26bucket%3dtest%0a
| 지정 변수 | 설명 | 업로드 인터페이스 |
|---|---|---|
| $(persistentID) | 업로드 전처리/영구 트리거의 프로세스 ID | 일반 업로드(멀티파트 업로드 시 제한적) |
| $(bucket) | 업로드 대상 버킷명 | 일반 업로드/멀티파트 업로드 |
| $(key) | 공간에 저장되는 파일 이름 | 일반 업로드/멀티파트 업로드 |
| $(fname) | 원본 파일명 | 일반 업로드/멀티파트 업로드 |
| $(hash) | 리소스의 Etag | 일반 업로드/멀티파트 업로드 |
| $(fsize) | 리소스 크기(바이트) | 일반 업로드/멀티파트 업로드 |
| $(mimeType) | 리소스 타입(예: image/jpg) | 일반 업로드/멀티파트 업로드 |
| $(url) | 실제 리소스 접근 경로, URL-safe Base64 인코딩됨 | 일반 업로드/멀티파트 업로드 |
| $(ip) | 요청의 소스 IP | 일반 업로드/멀티파트 업로드 |
| $ (costTime) | 서버가 요청을 받고 콜백 시작까지 시간(밀리초) | 일반 업로드/멀티파트 업로드 |
| $(avinfo) | 비디오 메타데이터, JSON, URL-safe Base64 인코딩 | 일반 업로드/멀티파트 업로드 |
| $(imageInfo) | 업로드 이미지의 기본정보, URL-safe Base64 인코딩 | 일반 업로드/멀티파트 업로드 |
| $(exif) | 업로드 이미지의 Exif, URL-safe Base64 인코딩 | 일반 업로드/멀티파트 업로드 |
| $(mimeType) | 리소스 타입(예: image/jpg) | 일반 업로드/멀티파트 업로드 |
콜백 서버의 응답 코드와 JSON 형식의 응답 내용을 받은 후, 오브젝트 스토리지 플랫폼은 해당 응답을 기반으로 클라이언트에 결과를 전달합니다.
{
"hash": "<hash string>",
"response": "<response string>"
}
{
"hash": "<hash string>",
"error": {
"callbackUrl": "<callbackUrl string>",
"callback_bodyType": "<callback_bodyType string>",
"callback_body": "<callback_body string>",
"token": "<token string>",
"err_code": "<err_code string>",
"error": "<unexpected response>"
}
}
CDNetwork 오브젝트 스토리지는 콜백 요청 헤더에 Authorization 필드를 추가합니다.
형식:
<Accesskey>:<Urlsafe_Base64_Encode(hmac_sha1(callBackUrlWithQuery+"\n"+urlsafe_base64_encode(callbackBody),SecretKey))>
예시:
d0e56f9f4a75267eba123348f839fbedcd9464c6:OTQzNzU5YWVjOTZlNTRlMWIwYmQzZTA2ZDhjMTFhOWEyNGM1ZjIzZg==
업로드 콜백 실패 시 기본적으로 3회 연속 재시도를 진행하며, 이후 1분마다 5회(총8회) 재시도를 합니다.
saveKey 사용자 지정 네이밍saveKey는 리소스 명칭 커스터마이징에 사용하며, 업로드 범위에서 key가 지정되지 않은 경우에만 동작합니다. 단일 파일의 일반 업로드에서만 지원됩니다.
saveKey는 정수, 커스텀 치환 변수, 지정 치환 변수를 지원하며, 조합해서 사용할 수 있습니다.
정수
value saveKey: constant
폴더
형식: dirname/key
saveKey: dir/key
형식: $(x:variable)
예시:
saveKey: $(x:position)
$(x:position)= test일 때, 저장 파일명은 test가 됩니다.
참고: 커스텀 변수는 UTF-8이어야 하며 &를 포함할 수 없습니다.
특수 치환 변수
$(variable) saveKey: $(year)/$(month)/$(hash)
예를 들어, 현재 시각이 2016년 4월이면, 업로드한 파일은 2016/04/해시로 저장됩니다.
| 지정 변수 | 설명 |
|---|---|
| $(fname) | 업로드 원본 파일명 |
| $(hash) | 리소스의 Etag |
| $(mimeType) | 리소스 타입(예: image/jpg) |
| $(suffix) | 리소스 확장자(없으면 unknown) |
| $(fprefix) | 확장자를 제외한 파일명 |
| $(uuid) | 난수 |
| $(year) | 업로드 연도(예: 2015) |
| $(month) | 업로드 달(예: 01) |
| $(day) | 업로드 일(예: 01) |
| $(hour) | 업로드 시(예: 01) |
| $ (min) | 업로드 분(예: 01) |
| $(sec) | 업로드 초(예: 01) |
동영상 트랜스코딩 및 스크린샷 관련 명령어는 Ops 파라미터 포맷을 참고하세요.
예시:
동영상 트랜스코딩:
persistentOps=avthumb/mp4/vb/64k|saveas/YnVja2V0OmZpbGVrZXk=;avthumb/flv/vb/64k|saveas/YnVja2V0OmZpbGVrZXk=
동영상 스크린샷:
persistentOps=vframe/jpg/offset/10|saveas/YnVja2V0OmZpbGVrZXk=;vframe/jpg/offset/15|saveas/YnVja2V0OmZpbGVrZXk=
참고: 여러 명령어는
;로 이어서 사용할 수 있습니다.