Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

미디어 항목 업로드(Put Media Item) (V2)

기존 미디어 집합에 파일 내용을 업로드합니다. 집합 설정의 pathsRequired가 참이면 mediaItemPath를 지정하고, 트랜잭션을 사용하는 집합이면 transactionId를 제공합니다.

branchName, branchRid, viewRid 중 하나만 지정합니다. 모두 생략하면 기본 브랜치에 업로드하며 둘 이상을 지정하면 오류가 발생합니다. 항목 RID는 서버가 생성하도록 생략하는 방식을 우선 사용합니다.

이 엔드포인트는 미리보기 기능이며 언제든 변경되거나 제거될 수 있습니다. 사용하려면 preview=true를 지정합니다.

HTTP 요청

POST /api/v2/mediasets/{mediaSetRid}/items

작업 식별자는 v2.putMediaItem입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:mediasets-write 권한 범위가 필요합니다. 각 요청에 Authorization: Bearer <접근 토큰>을 전달합니다.

경로 매개변수

이름자료형필수 여부의미와 조건예시 값
mediaSetRidstring필수Foundry 미디어 집합의 RID입니다.

쿼리 매개변수

이름자료형필수 여부의미와 조건예시 값
mediaItemPathstring선택미디어 집합 안에서 항목을 식별하는 경로입니다. 기반 미디어 집합이 경로를 요구하면 필수입니다.q3-data/my-file.png
branchNamestring선택항목을 업로드할 브랜치 이름입니다. branchRid 또는 viewRid와 함께 지정할 수 없습니다.
branchRidstring선택항목을 업로드할 브랜치 RID입니다. branchName 또는 viewRid와 함께 지정할 수 없습니다.
viewRidstring선택항목을 업로드할 뷰 RID입니다. branchName 또는 branchRid와 함께 지정할 수 없습니다.
transactionIdstring선택요청에 연결할 트랜잭션 ID입니다. 트랜잭션을 사용하는 미디어 집합에서는 필수입니다.
mediaItemRidstring선택생성할 항목의 RID입니다. 생략하면 서버가 생성하며 일반적으로 이 방식을 사용합니다. 결정적이거나 클라이언트가 제어하는 식별자가 꼭 필요한 작업에서만 직접 지정합니다. 형식은 ri.mio.<instance>.media-item.<UUID>이며 <instance>는 미디어 집합 RID의 인스턴스 부분과 같고 <UUID>는 UUID여야 합니다. 형식이 잘못되면 InvalidMediaItemRid, 같은 RID의 항목이 이미 있으면 MediaItemRidAlreadyExists 오류가 발생합니다.
previewboolean선택true이면 미리보기 단계의 베타 기능을 사용합니다.true

요청 본문

필수 본문은 파일의 바이너리 내용입니다. Content-Type: application/octet-stream을 사용하며 JSON이나 multipart 폼으로 감싸지 않습니다.

응답

응답 형식은 PutMediaItemResponse입니다.

이름자료형필수 여부의미와 조건예시 값
mediaItemRidstring필수미디어 집합 안의 개별 항목 RID입니다.
mediaSetViewRidstring필수미디어 집합 뷰의 RID입니다. 뷰는 독립적인 미디어 항목 모음입니다.

개별 오류

오류 응답 처리는 공통 API 오류 계약을 따릅니다.

요청 예제

FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 제공합니다.

환경 변수 MEDIA_SET_RID에 실제 요청 대상의 식별자를 제공합니다.

가상 경로 q3-data/my-file.png를 한 번 URL 인코딩한 예제입니다. 트랜잭션을 사용하지 않는 집합의 기본 브랜치를 대상으로 하며 실제 경로로 바꿉니다. 트랜잭션 집합에서는 생성한 ID를 transactionId 쿼리 매개변수에 추가합니다.

MEDIA_UPLOAD_FILE은 업로드할 로컬 파일의 경로입니다. 파일 내용을 바이너리로 전송합니다. JavaScript 예제는 스트림 요청 본문을 지원하는 Node.js에서 ES 모듈(.mjs)로 실행합니다.

cURL

curl --fail -X POST \
	-H "Content-type: application/octet-stream" \
	-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
	"https://${FOUNDRY_HOST}/api/v2/mediasets/${MEDIA_SET_RID}/items?mediaItemPath=q3-data%2Fmy-file.png&preview=true" \
	--data-binary "@${MEDIA_UPLOAD_FILE}"

Python

Requests 라이브러리가 설치된 환경에서 사용합니다.

import os
import requests

HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
    "content-type": "application/octet-stream",
    "authorization": "Bearer {}".format(TOKEN)
}

with open(os.environ["MEDIA_UPLOAD_FILE"], "rb") as media_file:
    with requests.post('https://{}/api/v2/mediasets/{mediaSetRid}/items?mediaItemPath=q3-data%2Fmy-file.png&preview=true'.format(HOSTNAME, mediaSetRid=os.environ["MEDIA_SET_RID"]), headers=headers, data=media_file) as response:
        response.raise_for_status()
        print(response.json())

Java

Apache HttpClient 4.5 API를 사용하는 PutMediaItemExample.java 예제입니다.

import java.io.File;
import java.io.IOException;
import org.apache.http.entity.FileEntity;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

public class PutMediaItemExample {
    public static void main(String[] args) throws Exception {
        String HOSTNAME = System.getenv("FOUNDRY_HOST");
        String TOKEN = System.getenv("FOUNDRY_TOKEN");

        try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
            HttpPost request = new HttpPost("https://" + HOSTNAME + "/api/v2/mediasets/" + System.getenv("MEDIA_SET_RID") + "/items?mediaItemPath=q3-data%2Fmy-file.png&preview=true");
            request.addHeader("content-type", "application/octet-stream");
            request.addHeader("authorization", String.format("Bearer %s", TOKEN));
            request.setEntity(new FileEntity(new File(System.getenv("MEDIA_UPLOAD_FILE"))));
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                int status = response.getStatusLine().getStatusCode();
                if (status < 200 || status >= 300) throw new IOException("HTTP " + status);
                System.out.println(EntityUtils.toString(response.getEntity(), "UTF-8"));
            }
        }
    }
}

JavaScript

fetch를 제공하는 Node.js 환경에서 사용합니다. import가 있는 예제는 ES 모듈(.mjs)로 실행합니다. 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.

import { createReadStream } from "node:fs";

const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;

const mediaFile = createReadStream(process.env.MEDIA_UPLOAD_FILE);
try {
    const response = await fetch(`https://${HOSTNAME}/api/v2/mediasets/${process.env.MEDIA_SET_RID}/items?mediaItemPath=q3-data%2Fmy-file.png&preview=true`, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/octet-stream',
        'Authorization': `Bearer ${TOKEN}`,
    },
    body: mediaFile,
    duplex: 'half'
});
    if (!response.ok) {
        await response.body?.cancel();
        throw new Error(`HTTP ${response.status}`);
    }
    console.log(await response.json());
} finally {
    mediaFile.destroy();
}

PowerShell

스크립트 오류가 발생하면 중단하도록 ErrorActionPreference를 설정합니다.

$ErrorActionPreference = 'Stop'
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST

$headers = @{
    "authorization" = "Bearer $TOKEN"
}

$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/mediasets/${env:MEDIA_SET_RID}/items?mediaItemPath=q3-data%2Fmy-file.png&preview=true" `
	-Method Post `
	-Headers $headers `
	-ContentType application/octet-stream `
	-InFile $env:MEDIA_UPLOAD_FILE

$response.content