Functions는 엄격한 메모리 제한이 있는 환경에서 실행됩니다. 파일 데이터를 다룰 때 이러한 메모리 제한을 초과하는 것이 빠르게 발생할 수 있으므로, 20MB 이하의 첨부파일만 다루는 것을 권장합니다.
첨부파일은 오브젝트의 속성처럼 작동하는 파일입니다. 첨부파일은 임시 파일로 업로드되며 액션을 통해 오브젝트에 첨부됩니다. 오브젝트에 첨부되면 첨부파일은 지속되며 다른 속성과 유사하게 접근할 수 있습니다.
첨부파일은 액션에서 입력값으로 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; }
번역된 코드 주석:
Blob
오브젝트를 생성해야 할 것이며, 이 오브젝트는 uploadFile
메서드에 파라미터로 전달됩니다.