Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

임시 미디어 업로드(Upload Media) (V2)

임시 미디어 항목을 업로드하고 MediaReference를 받습니다. 항목이 1시간 안에 영구 저장되지 않으면 삭제됩니다. 응답을 받았다는 이유만으로 영구 보관이 완료되었다고 판단하지 않습니다.

filename은 필수입니다. 사용자 지정 mediaItemRid는 꼭 필요한 경우에만 사용하고 일반적으로 서버가 생성하도록 생략합니다. 이 작업의 OAuth 권한 범위는 미디어 집합 쓰기가 아닌 api:ontologies-read와 api:ontologies-write입니다.

선택 헤더 attribution에는 호출 환경의 사용량 귀속 문자열을 전달할 수 있습니다. 여러 리소스가 귀속 대상으로 지정되면 목록의 첫 번째 리소스에 사용량을 귀속합니다.

HTTP 요청

PUT /api/v2/mediasets/media/upload

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

경로 매개변수

지정할 경로 매개변수가 없습니다.

쿼리 매개변수

이름자료형필수 여부의미와 조건예시 값
filenamestring필수업로드할 항목의 사용자 지정 이름으로, 이 요청에서는 반드시 지정합니다. 같은 경로에 여러 파일을 업로드하면 가장 최근 파일만 해당 경로에 연결됩니다.my-file.png
mediaItemRidstring선택생성할 항목의 RID입니다. 생략하면 서버가 생성하며 일반적으로 이 방식을 사용합니다. 결정적이거나 클라이언트가 제어하는 식별자가 꼭 필요한 작업에서만 직접 지정합니다. 형식은 ri.mio.<instance>.media-item.<UUID>이며 <instance>는 미디어 집합 RID의 인스턴스 부분과 같고 <UUID>는 UUID여야 합니다. 형식이 잘못되면 InvalidMediaItemRid, 같은 RID의 항목이 이미 있으면 MediaItemRidAlreadyExists 오류가 발생합니다.

요청 본문

필수 본문은 파일의 바이너리 내용이며 Content-Type: application/octet-stream으로 전송합니다.

응답

응답 형식은 MediaReference입니다.

이름자료형필수 여부의미와 조건예시 값
mimeTypestring필수파일 또는 첨부의 MIME 유형입니다. 예: application/json, application/pdf, application/octet-stream, image/jpeg.application/pdf
referenceunion<mediaSetViewItem>필수미디어 참조의 종류를 구분합니다.

reference의 구조

분기 mediaSetViewItem
이름자료형필수 여부의미와 조건예시 값
typeenum필수허용값: mediaSetViewItem.mediaSetViewItem
mediaSetViewItemobject필수
mediaSetViewItem의 구조
이름자료형필수 여부의미와 조건예시 값
mediaSetRidstring필수Foundry 미디어 집합의 RID입니다.
mediaSetViewRidstring필수미디어 집합 뷰의 RID입니다. 뷰는 독립적인 미디어 항목 모음입니다.
mediaItemRidstring필수미디어 집합 안의 개별 항목 RID입니다.
tokenstring선택특정 미디어 항목의 읽기 접근을 부여하는 토큰입니다.

개별 오류

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

요청 예제

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

예시 filename=my-file.png를 사용할 파일 이름으로 바꿉니다. 이 요청은 임시 미디어를 생성합니다.

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

cURL

curl --fail -X PUT \
	-H "Content-type: application/octet-stream" \
	-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
	"https://${FOUNDRY_HOST}/api/v2/mediasets/media/upload?filename=my-file.png" \
	--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.put('https://{}/api/v2/mediasets/media/upload?filename=my-file.png'.format(HOSTNAME), headers=headers, data=media_file) as response:
        response.raise_for_status()
        print(response.json())

Java

Apache HttpClient 4.5 API를 사용하는 UploadMediaExample.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.HttpPut;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

public class UploadMediaExample {
    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()) {
            HttpPut request = new HttpPut("https://" + HOSTNAME + "/api/v2/mediasets/media/upload?filename=my-file.png");
            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/media/upload?filename=my-file.png`, {
    method: 'PUT',
    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/media/upload?filename=my-file.png" `
	-Method Put `
	-Headers $headers `
	-ContentType application/octet-stream `
	-InFile $env:MEDIA_UPLOAD_FILE

$response.content