최신 업데이트:2025-12-26 17:32:31
Multipart Upload 기능을 사용하면 하나의 비디오를 여러 부분(블록)으로 분할하여 동시에 또는 순차적으로 업로드할 수 있습니다. 이 방식은 대용량 비디오 업로드 시 높은 신뢰성과 업로드 중단 시 이어받기를 지원하므로 권장됩니다.
이 방법으로 비디오를 성공적으로 업로드하려면 두 가지 핵심 개념인 블록과 청크를 이해해야 합니다.
기본 작업 흐름:
/mkblk): 서버에 해당 블록의 첫 번째 청크를 업로드하여 블록을 생성합니다./bput): 해당 블록의 모든 이후 청크를 업로드하여 블록을 완성합니다./mkfile): 모든 블록 업로드가 완료되면, 지정된 순서대로 서버에 블록 정보를 병합 요청하여 최종 비디오를 생성합니다.![[ Product Maintenance ] Cloud Security Product Maintenance Announcement](https://documents.cdnetworks.com/wcs/draft/help_doc/en_us/15923/43764/1766740390387_image.png)
이 문서에 있는 어떤 엔드포인트를 호출하기 전에도, 반드시 업로드 권한을 획득해야 합니다.
/vod/videoManage/getUploadToken)을 호출합니다.| 토큰 응답 값 | Multipart Header/Parameter에 매핑 | 설명 |
|---|---|---|
uploadUrl |
Host (Base URL) | 업로드 요청을 전송할 Domain입니다. |
uploadToken |
Authorization | 업로드 요청에 대한 인증 토큰입니다. |
fileKey |
Key | 비디오 저장을 위한 고유 식별자/경로입니다. |
이 Endpoint는 새 블록을 초기화하고 해당 블록의 첫 번째 데이터 청크를 업로드합니다.
Endpoint: POST <uploadUrl>/mkblk/<BlockSize>/<BlockIndex>
| 매개변수 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
BlockSize |
Integer | Yes | 블록의 크기(바이트 단위)입니다. **4 MB(4194304)**의 배수여야 하며, 마지막 블록만 실제 남은 크기가 될 수 있습니다. |
BlockIndex |
Integer | Yes | 블록의 0부터 시작하는 인덱스입니다(예: 첫 번째 블록은 0, 두 번째는 1). |
| Header | Value | Required | Description |
|---|---|---|---|
Authorization |
String | 예 | 업로드 토큰 요청 API로부터 획득한 uploadToken입니다. |
Content-Length |
Integer | 예 | 현재 청크의 크기(바이트 단위)입니다. |
Content-Type |
String | 예 | 고정 값: application/octet-stream. |
UploadBatch |
UUID | 예 | 클라이언트가 생성한 임의의 UUID 문자열로, 해당 비디오 업로드 세션을 식별합니다. 이 비디오와 관련된 모든 요청에 동일한 UUID를 사용해야 합니다. |
Key |
String | 예 | fileKey(또는 업로드할 비디오 경로)입니다. 업로드 정책에서 지정할 수도 있습니다. |
{
"ctx": "다음 청크를 위한 ExampleContextString...",
"checksum": "checksum_string",
"crc32": 123456789,
"offset": 4194304
}
bput 요청을 위해 필요한 Context 문자열입니다. 다음 청크 업로드를 위해 이 값을 반드시 저장해야 합니다.이 엔드포인트를 사용하여 특정 블록의 나머지 청크를 업로드합니다. 현재 블록이 완전히 업로드될 때까지 이 호출을 반복해야 합니다.
엔드포인트: POST <uploadUrl>/bput/<Ctx>/<NextChunkOffset>
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
Ctx |
String | 예 | 이전 /mkblk 또는 /bput 응답에서 반환된 컨텍스트 문자열입니다. 이 값은 청크를 올바른 블록과 연결합니다. |
NextChunkOffset |
Integer | 예 | 현재 청크가 블록 내에서 시작되는 오프셋입니다. 이전 응답에서 반환된 offset과 일치합니다. |
| 헤더 | 값 | 필수 | 설명 |
|---|---|---|---|
Authorization |
String | 예 | uploadToken입니다. |
Content-Length |
Integer | 예 | 업로드 중인 현재 청크의 크기(바이트 단위). |
Content-Type |
String | 예 | 고정 값: application/octet-stream. |
UploadBatch |
UUID | 예 | 1단계에서 사용된 동일한 UUID. |
Key |
String | 예 | fileKey. |
{
"ctx": "ExampleContextStringForNextChunk...",
"checksum": "checksum_string",
"crc32": 123456789,
"offset": 8388608
}
bput 요청에 필요한, 업데이트된 컨텍스트 문자열입니다.모든 블록이 성공적으로 업로드된 후, 이 엔드포인트를 호출하여 최종 비디오로 병합하십시오.
엔드포인트: POST <uploadUrl>/mkfile/<FileSize>
참고: URL 형식에 선택적 파라미터를 추가할 수 있습니다. <uploadUrl>/mkfile/<FileSize>/x:<UserParam>/<EncodedValue>.
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
FileSize |
Integer | 예 | 전체 비디오의 총 크기(바이트 단위). |
| Header | Value | 필수 여부 | 설명 |
|---|---|---|---|
Authorization |
String | 예 | uploadToken입니다. |
Content-Type |
String | 예 | 고정 값: text/plain;charset=UTF-8. |
UploadBatch |
UUID | 예 | 이전 단계에서 사용된 동일한 UUID입니다. |
Key |
String | 예 | fileKey입니다. |
MimeType |
String | 아니오 | 비디오의 사용자 지정 MIME 타입입니다. |
DeleteAfterDays |
Integer | 아니오 | 비디오를 보관할 일수입니다. 0은 즉시 삭제를 의미합니다(권장하지 않음). |
각 블록의 인덱스 순서대로, 각 블록에 대해 마지막으로 반환된 ctx 문자열을 쉼표로 구분한 목록입니다.
형식:
<LastCtxOfBlock0>,<LastCtxOfBlock1>,<LastCtxOfBlock2>
{
"hash": "FqlKj-9023...",
"key": "video/2023/example.mp4"
}
offset 응답을 참고해 로컬의 진행 상태와 비교하여 마지막으로 성공한 블록 또는 청크부터 이어서 업로드할 수 있습니다./mkfile 단계를 완료하여 영상 업로드를 마무리해 주시기 바랍니다.