本体函数Functions on objectsAPI: 附件

注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

API: 附件

函数在具有严格内存限制的环境中执行。在处理文件数据时,超出这些内存限制可能会很快发生;我们建议仅与小于20MB的附件进行交互。

附件是一个像对象属性一样的文件。附件作为临时文件上传,并通过操作附加到对象上。一旦附加到对象,附件即被持久化,并可以类似于其他属性访问。

函数中的附件

附件可以直接作为操作的输入传递到函数中,或作为对象上的属性访问。您也可以在函数中创建附件。

读取附件数据

要读取附件中的原始数据,请在附件上使用readAsync方法。readAsync方法的签名如下:

Copied!
1 readAsync(): Promise<Blob>; // 读取异步方法,返回一个Promise对象,包含Blob类型的数据

Blob是一个标准的JavaScript类型↗,表示一个类似文件的不可变原始数据对象。

您可能需要使用库或编写自定义代码来处理复杂的文件类型。例如,PDF文件必须使用适当的库进行解析。了解更多关于向函数库添加NPM依赖项的信息。

通常,与解析文件数据相关的依赖项将依赖于fs模块,而该模块在函数环境中不可用。这一限制可能会在编译和执行期间导致fs模块出错。为了解决这个限制,您可以引入对内存文件系统(例如memfs)的依赖。然后,将该依赖以fs的名称进行别名化。

例如,在您的package.json中使用NPM依赖memfs将如下所示:

Copied!
1 2 3 4 5 "fs": "npm:memfs@^x.x.x" // 这是一个JSON格式的依赖项声明,用于在项目中使用memfs包。 // "fs" 代表文件系统模块,它在这里被替换为memfs库的一个特定版本。 // "npm:memfs@^x.x.x" 表示从npm获取memfs包,并且使用符合x.x.x版本号的所有版本。 // memfs 是一个内存文件系统库,常用于测试环境或需要模拟文件系统的场景。

以下示例演示如何从附件中读取数据:

Copied!
1 2 3 4 5 6 7 8 9 10 11 @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); }

创建附件

函数也可以用来创建附件并将它们附加到Objects。为了使在函数中创建的附件得以持久化,函数必须进行Ontology编辑,以将附件链接到Object。

未附加到Object的附件只能由上传者查看,并在一定时间后自动删除。

要创建附件,请在从@foundry/functions-api导入的Attachments接口上使用uploadFileuploadFile方法的签名如下:

Copied!
1 2 // 上传文件函数,接受文件名和Blob对象,返回一个Promise类型的Attachment uploadFile(filename: string, blob: Blob): Promise<Attachment>;

以下示例展示了上传文件并将生成的附件指派给Object的过程。

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 变量的逻辑 // Logic to create a Blob and assign it to the data variable const maintenanceLog = await Attachments.uploadFile("maintenance-log.txt", data); // 上传文件并返回维护日志的附件信息 aircraft.maintenanceLog = maintenanceLog; }

您可能需要依赖库或自定义代码来创建Blob对象,该对象作为参数传递给uploadFile方法。