注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
関数は厳格なメモリ制限がある環境で実行されます。ファイルデータを扱う際には、これらのメモリ制限をすぐに超えることがあります。そのため、20MB以下の添付ファイルのみを操作することをお勧めします。
添付ファイルとは、オブジェクトのプロパティのように機能するファイルです。添付ファイルは一時ファイルとしてアップロードされ、アクションを通じてオブジェクトに添付されます。オブジェクトに添付されると、添付ファイルは持続的に保存され、他のプロパティと同様にアクセスできます。
添付ファイルは、アクションからの入力として直接関数に渡すことができます。また、オブジェクトのプロパティとしてアクセスしたり、関数内で添付ファイルを作成することもできます。
添付ファイルから生データを読み取るには、添付ファイルの readAsync
メソッドを使用します。readAsync
メソッドの署名は以下の通りです:
Copied!1 2
// 非同期でデータを読み込む関数 readAsync(): Promise<Blob>;
Blob
は、不変の生データを持つファイルのようなオブジェクトを表す標準的なJavaScript タイプです。
複雑なファイルタイプを処理するためには、ライブラリを使用するか、独自のカスタムコードを書く必要があるでしょう。例えば、PDFは適切なライブラリで解析する必要があります。Functions リポジトリに NPM 依存関係を追加する方法についての詳細はこちら。
しばしば、ファイルデータを解析するための依存関係は fs
モジュールに依存していることがありますが、このモジュールは Functions 環境では利用できません。この制約により、コンパイルや実行中に fs
モジュールのエラーが発生することがあります。この制約を回避するために、メモリ内ファイルシステム (memfs
など)に依存するようにすることができます。そして、その依存関係を fs
名のエイリアスとして導入します。
例えば、NPM の依存関係 memfs
を使用すると、ユーザーの package.json
では以下のようになります。
Copied!1 2
// このコードは、memfs パッケージのバージョン x.x.x 以上を使用することを指定しています。 "fs": "npm:memfs@^x.x.x"
以下の例は、添付ファイルからデータを読み込む方法を示しています:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13
@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; // "maintenance-log.txt"として新しいメンテナンスログをアップロードします aircraft.maintenanceLog = await Attachments.uploadFile("maintenance-log.txt", updatedMaintenanceLogData); }
Functions は、添付ファイルを作成し、それらをオブジェクトに添付するためにも使用できます。Functions で作成された添付ファイルを永続化するためには、Function が添付ファイルをオブジェクトにリンクするオントロジーの編集を行う必要があります。
オブジェクトに添付されていない添付ファイルは、アップローダーのみが表示でき、一定期間後に自動的に削除されます。
添付ファイルを作成するには、@foundry/functions-api
からインポートした Attachments
インターフェースの uploadFile
を使用します。uploadFile
メソッドのシグネチャは以下の通りです:
Copied!1 2
// ファイルをアップロードする関数 uploadFile(filename: string, blob: Blob): Promise<Attachment>;
次の例は、ファイルをアップロードし、結果の添付ファイルをオブジェクトに割り当てるプロセスを示しています。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import { Attachments, Attachment, OntologyEditFunction } from "@foundry/functions-api" @OntologyEditFunction() public async setMaintenanceLog(aircraft: Aircraft): Promise<void> { const data: Blob; // Blobを作成し、それをdata変数に割り当てるロジック // (ここでは、その具体的なコードは省略されています) const maintenanceLog = await Attachments.uploadFile("maintenance-log.txt", data); // メンテナンスログをアップロードし、その結果をmaintenanceLog変数に保存します。 aircraft.maintenanceLog = maintenanceLog; // aircraftオブジェクトのmaintenanceLogプロパティに、アップロードしたメンテナンスログを設定します。 }
おそらく、Blob
オブジェクトを作成するためにライブラリやカスタムコードに依存する必要があります。このBlob
オブジェクトは、uploadFile
メソッドにパラメーターとして渡されます。