온톨로지FunctionsFunctions on objectsAPI: 첨부파일

본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

API: 첨부파일

Functions는 엄격한 메모리 제한이 있는 환경에서 실행됩니다. 파일 데이터를 다룰 때 이러한 메모리 제한을 초과하는 것이 빠르게 발생할 수 있으므로, 20MB 이하의 첨부파일만 다루는 것을 권장합니다.

첨부파일은 오브젝트의 속성처럼 작동하는 파일입니다. 첨부파일은 임시 파일로 업로드되며 액션을 통해 오브젝트에 첨부됩니다. 오브젝트에 첨부되면 첨부파일은 지속되며 다른 속성과 유사하게 접근할 수 있습니다.

Functions에서의 첨부파일

첨부파일은 액션에서 입력값으로 Functions에 직접 전달되거나 오브젝트의 속성으로 접근할 수 있습니다. Functions에서 첨부파일을 생성할 수도 있습니다.

첨부파일 데이터 읽기

첨부파일에서 원시 데이터를 읽으려면, Attachment에서 readAsync 메소드를 사용합니다. readAsync 메소드의 서명은 다음과 같습니다:

Copied!
1 2 // 비동기 방식으로 읽기: Promise<Blob>를 반환합니다. readAsync(): Promise<Blob>;

Blob은 변경 불가능한 원시 데이터의 파일 같은 객체를 나타내는 표준 JavaScript 유형입니다.

복잡한 파일 유형을 처리하기 위해 라이브러리를 사용하거나 커스텀 코드를 작성해야 할 수 있습니다. 예를 들어, PDF는 적절한 라이브러리로 파싱해야 합니다. Functions 저장소에 NPM 의존성을 추가하는 방법에 대해 더 알아보기.

파일 데이터를 파싱하는 데 관련된 종속성은 종종 fs 모듈에 의존하는데, 이는 Functions 환경에서 사용할 수 없습니다. 이 제한으로 인해 컴파일 및 실행 중에 fs 모듈 오류가 발생할 수 있습니다. 이 제한을 우회하기 위해, 메모리 내 파일 시스템(memfs 예시)에 대한 의존성을 도입하고, fs 이름 아래에 별칭을 부여할 수 있습니다.

예를 들어, NPM 의존성 memfs를 사용하는 것은 package.json에서 다음과 같이 나타낼 수 있습니다:

Copied!
1 "fs": "npm:memfs@^x.x.x" // "fs": "npm:memfs@^x.x.x" - "fs"는 파일 시스템을 나타내며, 여기서는 memfs 버전 x.x.x를 npm 패키지 관리자를 통해 사용하겠다는 것을 의미합니다. '^' 기호는 해당 버전 이상을 의미합니다.

다음 예제는 첨부 파일로부터 데이터를 읽는 방법을 보여줍니다:

Copied!
1 2 3 4 5 6 7 8 9 10 @OntologyEditFunction() public async updateMaintenanceLog(aircaft: Aircraft, completedMaintenanceLog: Attachment): Promise<void> { const aircraftMaintenanceLogData: Blob = await aircraft.maintenanceLog.readAsync(); // 비행기 유지보수 로그 데이터를 비동기적으로 읽어옵니다. const completedMaintenanceLogData: Blob = await completedMaintenanceLog.readAsync(); // 완료된 유지보수 로그 데이터를 비동기적으로 읽어옵니다. // 현재의 비행기 로그와 완료된 로그를 비교하고 새로운 유지보수 로그를 생성합니다. const updatedMaintenanceLogData: Blob; aircraft.maintenanceLog = await Attachments.uploadFile("maintenance-log.txt", updatedMaintenanceLogData); // 업데이트된 유지보수 로그 데이터를 "maintenance-log.txt" 파일로 업로드합니다. }

첨부 파일 생성

Functions를 사용하여 첨부 파일을 생성하고 오브젝트에 첨부할 수도 있습니다. Functions에서 생성된 첨부 파일이 유지되려면, Function은 첨부 파일을 오브젝트에 연결하는 온톨로지 편집을 수행해야 합니다.

오브젝트에 첨부되지 않은 첨부 파일은 업로더만 볼 수 있으며 일정 기간이 지나면 자동으로 삭제됩니다.

첨부 파일을 생성하려면, @foundry/functions-api에서 가져온 Attachments 인터페이스의 uploadFile을 사용하세요. uploadFile 메소드의 서명은 다음과 같습니다:

Copied!
1 2 3 4 // filename: 문자열 형식의 파일 이름 // blob: Blob 형식의 데이터. 대개 파일을 읽거나 다운로드한 데이터를 의미합니다. // Promise<Attachment>: 비동기적으로 처리하며, 작업이 완료되면 Attachment 객체를 반환합니다. uploadFile(filename: string, blob: Blob): Promise<Attachment>;

다음 예시는 파일을 업로드하고 생성된 첨부파일을 오브젝트에 할당하는 과정을 보여줍니다.

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 import { Attachments, Attachment, OntologyEditFunction } from "@foundry/functions-api" @OntologyEditFunction() public async setMaintenanceLog(aircraft: Aircraft): Promise<void> { const data: Blob; // Blob을 생성하고 data 변수에 할당하는 로직 // "maintenance-log.txt"라는 이름으로 파일을 업로드하고 maintenanceLog 변수에 할당합니다. const maintenanceLog = await Attachments.uploadFile("maintenance-log.txt", data); // 항공기의 유지보수 로그를 업데이트합니다. aircraft.maintenanceLog = maintenanceLog; }

번역된 코드 주석:

  1. Blob을 생성하고 data 변수에 할당하는 로직
  2. "maintenance-log.txt"라는 이름으로 파일을 업로드하고 maintenanceLog 변수에 할당합니다.
  3. 항공기의 유지보수 로그를 업데이트합니다. 라이브러리나 커스텀 코드를 사용하여 Blob 오브젝트를 생성해야 할 것이며, 이 오브젝트는 uploadFile 메서드에 파라미터로 전달됩니다.