Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

OSDK에서 미디어 읽기와 업로드

미디어 참조를 가진 객체와 액션을 Ontology SDK 앱에 포함하면 파일을 읽고 업로드 및 전달할 수 있습니다. 프로젝트의 인증된 OSDK client와 실제 온톨로지에서 생성한 SDK를 사용합니다. 예제의 패키지명, 객체명, 기본 키와 속성은 사용하는 생성 SDK에 맞춰야 합니다.

TypeScript OSDK 미디어 지원은 베타입니다. Developer Console의 SDK versions > Settings에서 Package settings를 열고 TypeScript beta features를 활성화합니다. Developer Console은 해당 온톨로지의 미디어 속성을 포함한 개별 SDK 문서도 생성할 수 있습니다.

미디어 참조 읽기

속성의 fetchMetadata()는 메타데이터를, fetchContents()는 내용을 가져옵니다. 선택적 미디어 속성이 없다면 내용 응답도 없을 수 있으므로 응답 존재 여부를 함께 확인합니다.

import { OsdkMediaObject } from "@my-media-osdk/sdk";
import { MediaMetadata, MediaReference } from "@osdk/api";
import { Osdk, Result } from "@osdk/client";

const result = await client(OsdkMediaObject).fetchOne("<primaryKey>");

// Fetch metadata of a media property
const mediaMetadata = await result.mediaReference?.fetchMetadata();

// Fetch contents of a media property
const response = await result.mediaReference?.fetchContents();

if (response?.ok) {
    const data = await response.blob();
}

온톨로지 편집 함수에서 업로드

uploadMedia는 업로드한 파일의 MediaReference를 반환하며 객체의 미디어 속성에 설정할 수 있습니다. TypeScript v2의 온톨로지 편집 함수에서 사용하려면 TypeScript OSDK 2.6 이상이 필요합니다.

다음은 가상의 Aircraft 객체에 텍스트 파일 참조를 넣는 예시입니다. 실제 객체의 기본 키 및 필수 속성도 생성 SDK 정의에 맞춰 채워야 합니다. 파일 이름과 Hello, world는 설명용 값입니다.

// Ensure you are using TypeScript OSDK 2.6 or greater to use media uploads
// in Ontology Edit Functions.

import type { Client } from "@osdk/client";
import { Aircraft } from "@ontology-sdk/sdk";
import type { Edits } from "@osdk/functions";
import { createEditBatch, uploadMedia } from "@osdk/functions";

async function uploadTextToNewPlane(client: Client): Promise<Edits.Object<Aircraft>[]> {
    const batch = createEditBatch<Edits.Object<Aircraft>>(client);
    const blob = new Blob(["Hello, world"], { type: "text/plain" });
    const mediaReference = await uploadMedia(
        client,
        { data: blob, fileName: "/planes/aircraft.txt" }
    );
    batch.create(Aircraft, { myMediaProperty: mediaReference, /* ... */ });
    return batch.getEdits();
}

export default uploadTextToNewPlane;

Python 온톨로지 편집 함수의 미디어 업로드는 Python OSDK 2.145 이상이 필요합니다. 다음은 같은 작업의 Python 예시입니다. 고정 primary_key 값은 실제 생성할 객체의 고유 키로 바꿉니다.

# Ensure you are using Python OSDK 2.145 or greater to use media uploads
# in Ontology Edit Functions.

from ontology_sdk import FoundryClient
from ontology_sdk.ontology.objects import Aircraft
from functions.api import function, OntologyEdit

@function(beta=True, edits=[Aircraft])
def upload_text_to_new_plane() -> list[OntologyEdit]:
    client = FoundryClient()
    edits = client.ontology.edits()
    media_reference = client.ontology.media.upload_media(
        body="Hello, world".encode("utf8"),
        filename="/planes/aircraft.txt",
    )
    edits.objects.Aircraft.create(
        pk = "primary_key",
        my_media_property=media_reference,
        # ...
    )
    return edits.get_edits()

액션에 전달

업로드 과정에서 얻은 MediaReference를 미디어 매개변수가 있는 액션에 전달할 수 있습니다. 다음 함수는 업로드가 끝난 실제 참조와 path를 호출자로부터 받습니다. createMediaObject는 예시 생성 SDK의 액션입니다.

import { createMediaObject } from "@my-media-osdk/sdk";
import type { MediaReference } from "@osdk/api";
import type { Client } from "@osdk/client";

export async function createMediaRecord(
    client: Client,
    mediaReference: MediaReference,
    path: string,
) {
    return client(createMediaObject).applyAction(
        {
            media_reference: mediaReference,
            path,
        },
        { $returnEdits: true },
    );
}

반환 편집을 요청하는 $returnEdits: true와 액션 매개변수 이름은 실제 생성 API 계약에 맞춥니다. OSDK 객체 속성으로 미디어 참조 목록은 지원하지 않습니다.