コンテンツにスキップ

型付きメタデータ値と添付ファイル

ビジネスオブジェクトのメタデータプロパティ(GET/PATCH /v1/twin/{contextId}/object/{objectId}/metadataのmetadata)は、単純なstring、number、booleanだけに限定されません。プロパティ値は、外部リンクまたはアップロードされたファイル添付を表す特別な_p3d_typeフィールドを持つタグ付きオブジェクトにもなり得ます。このページでは、この値のユニオンとattachment型の背後にあるアップロードフローを説明します。


メタデータセクション内の各プロパティは、次のいずれかです。

値の種類形式
単純なstring"A short text"
単純なnumber42
単純なbooleantrue
External link{ "url": "...", "text": "...", "_p3d_type": "urn:primitive:obj:external-link" }
Attachment{ "name": "...", "id": "...", "_p3d_type": "urn:primitive:obj:attachment" }

_p3d_typeは判別子です。その値によって、2つのタグ付き形式のどちらであるかがわかります。それ以外の点では、両方のタグ付き形式は単なるオブジェクトです。読み取り用の追加エンドポイントは不要で、メタデータが返される場所であればどこでもインラインで返されます。

{
"Section name": {
"name": "A short text",
"numeric value": 42,
"toggle name": true,
"documentation link": {
"url": "https://doc.prevu3d.com/",
"text": "https://doc.prevu3d.com/",
"_p3d_type": "urn:primitive:obj:external-link"
},
"landing image": {
"name": "prevu_logo.jpg",
"id": "80559c9a-39ac-4e22-af81-7d7395f45673",
"_p3d_type": "urn:primitive:obj:attachment"
}
}
}
Section titled “External link(urn:primitive:obj:external-link)”
フィールド型備考
urlstringリンク先。
textstringリンクの表示テキスト。
_p3d_typestring常にurn:primitive:obj:external-link。

External linkは自己完結型です。メタデータの書き込み時にオブジェクトを直接設定すればよく、アップロードは不要です。

Attachment(urn:primitive:obj:attachment)

Section titled “Attachment(urn:primitive:obj:attachment)”
フィールド型備考
namestring元のファイル名。
idstring下記のアップロードフローで取得するattachmentのfileId。
_p3d_typestring常にurn:primitive:obj:attachment。

external linkと異なり、attachment値は先に存在している必要があるファイルを参照します。そのアップロードは、次に説明する独立した複数ステップの呼び出しシーケンスです。

メタデータへのファイルの添付

Section titled “メタデータへのファイルの添付”

ファイルをattachment値として参照できるようにするには、3ステップのシーケンスが必要です。アップロードを初期化し、パーツをS3にアップロードし、finalizeします。その後、返されたファイルIDを、次のメタデータ書き込み時にattachment値のidフィールドとして使用します。

メソッドパススコープ目的
POST/v1/twin/{contextId}/object/attachmentswrite:asset添付ファイルのアップロードを初期化
GET/v1/twin/{contextId}/object/attachments/{fileId}/refresh/{startIndex}write:asset期限切れのパートURLを再発行
POST/v1/twin/{contextId}/object/attachments/{fileId}/finalizewrite:assetアップロードをfinalize
GET/v1/twin/{contextId}/object/attachments/{fileId}/downloadread:asset署名付きダウンロードURLを取得
DELETE/v1/twin/{contextId}/object/attachments/{fileId}write:asset添付ファイルを削除

contextIdは添付ファイルが属するtwin、site、またはdraftのIDです。ビジネスオブジェクトの検索で使用するIDと同じです。

アップロード自体は、API内の他の場所でも使われている汎用的なinitiate → パーツのアップロード → finalizeの仕組み(マルチパート、presigned S3 URL、期限切れ時に再発行可能)と同じです。この仕組みとパート番号付けの落とし穴については、共有マルチパートアップロードリファレンスを参照してください。このセクションでは、添付ファイルに固有の内容のみを扱います。

POST {api_url}/v1/twin/{contextId}/object/attachments
Authorization: Bearer {access_token}
Content-Type: application/json
{ "fileName": "prevu_logo.jpg", "fileSize": 84213, "mimeType": "image/jpeg" }
{
"fileId": "80559c9a-39ac-4e22-af81-7d7395f45673",
"parts": 1,
"urls": [
{ "partNumber": 1, "url": "https://s3…/part-1?…" }
]
}

ステップ2:パーツのアップロード

Section titled “ステップ2:パーツのアップロード”

各チャンクをpresigned urlにPUTし、パートごとに返されるETagを保持します。詳細は共有マルチパートアップロードリファレンスに記載のとおりです。

POST {api_url}/v1/twin/{contextId}/object/attachments/{fileId}/finalize
Authorization: Bearer {access_token}
Content-Type: application/json
{ "parts": [ { "partNumber": 1, "etag": "\"a1b2c3d4e5f6\"" } ] }
{
"fileId": "80559c9a-39ac-4e22-af81-7d7395f45673",
"fileName": "prevu_logo.jpg",
"size": 84213
}

ステップ4:メタデータでファイルを参照

Section titled “ステップ4:メタデータでファイルを参照”

finalizeレスポンスのfileIdを取得し、次のメタデータ書き込みでattachment値のidとして設定します。

PATCH {api_url}/v1/twin/{contextId}/object/{objectId}/metadata
Authorization: Bearer {access_token}
Content-Type: application/json
{
"metadata": {
"Section name": {
"landing image": {
"name": "prevu_logo.jpg",
"id": "80559c9a-39ac-4e22-af81-7d7395f45673",
"_p3d_type": "urn:primitive:obj:attachment"
}
}
}
}

メタデータの書き込みは、単一プロパティのパッチではなく、新規・更新・削除されたセクションとプロパティをすべて含む完全なメタデータオブジェクトを受け取ります。そのため、新しいattachment参照に加えて、保持したいすべてのセクションとプロパティを含めてください。

GET /v1/twin/{contextId}/object/{objectId}/metadataは、各プロパティを書き込まれたとおりに正確に返します。単純なstring/number/boolean、または_p3d_typeを保持したまま上記2つのタグ付きオブジェクトのいずれかです。タグ付き値を読み取るための別途の「解決」ステップはありません。attachmentのidを含め、オブジェクト自体がメタデータレスポンス内にインラインで返されます。

ファイルのバイトデータを取得するには、そのidを下記のダウンロードエンドポイントにfileIdとして渡します。

添付ファイルのダウンロードと削除

Section titled “添付ファイルのダウンロードと削除”
GET {api_url}/v1/twin/{contextId}/object/attachments/{fileId}/download
Authorization: Bearer {access_token}
{ "url": "https://d111111abcdef8.cloudfront.net/…" }

返されるURLは署名付きのCloudFrontリンクで、有効期間は約4時間です。期限切れになった場合は、新しいURLを取得してください。

添付ファイルの実体を削除するには、次のようにします。

DELETE {api_url}/v1/twin/{contextId}/object/attachments/{fileId}
Authorization: Bearer {access_token}

添付ファイルのストレージは、RealityConnectの他のすべてのファイルと同じ組織単位のストレージ割り当てを使用します。添付ファイル専用の「割り当て」は存在しません。

質問回答
単一の添付ファイルの最大サイズ専用のサイズ上限は設けられていません。実質的な上限は、組織に残っているストレージの余裕です。
オブジェクトごとの添付ファイルの最大数専用の件数上限は設けられていません。メタデータセクションには、任意の数のattachment型プロパティを含めることができます。
twinごと、または組織ごとの合計添付ファイル専用のクォータはありません。各添付ファイルは通常のファイルとして保存され、組織全体のストレージ割り当てにカウントされます。これは、他のすべてのアップロードファイルが使用するのと同じカウンターです。使用量が組織に割り当てられたストレージを超えると、StorageLimitExceeded(エラーコードを参照)が返されます。この割り当てはプランごとに異なるため、ここで公開できる単一の数値はありません。組織の具体的な数値については、Prevu3Dのアカウントチームにご確認ください。
受け入れられるファイルタイプ送信したmimeTypeはどのようなものでも受け入れられます。満たすべき許可リストはありません。
複数のオブジェクトに添付された同じファイルアップロードごとに1回保存され、参照ごとには保存されません。同一のバイト列を2回アップロードする(initiate → finalizeの流れを2回別々に行う)と、2つの別々の保存済みファイルが作成されます。自動的な重複排除は行われません。同じ共有ドキュメントを複数のオブジェクトに、二重に保存せずに添付するには、一度だけアップロードし、再アップロードする代わりに、返されたidを各オブジェクトのattachment値で再利用してください。