Aller au contenu

Valeurs de métadonnées typées et pièces jointes

Les propriétés de métadonnées des objets métier (metadata sur GET/PATCH /v1/twin/{contextId}/object/{objectId}/metadata) ne se limitent pas à de simples strings, nombres et booléens. Une valeur de propriété peut aussi être un objet tagué portant un champ spécial _p3d_type, utilisé pour représenter un lien externe ou une pièce jointe téléversée. Cette page documente cette union de valeurs et le flux d’upload derrière le type attachment.


Chaque propriété à l’intérieur d’une section de métadonnées est l’une des suivantes :

Type de valeurForme
String simple"A short text"
Nombre simple42
Booléen simpletrue
Lien externe{ "url": "...", "text": "...", "_p3d_type": "urn:primitive:obj:external-link" }
Pièce jointe{ "name": "...", "id": "...", "_p3d_type": "urn:primitive:obj:attachment" }

_p3d_type est le discriminant : sa valeur littérale indique laquelle des deux formes taguées vous avez sous les yeux. Les deux formes taguées sont sinon de simples objets; aucun endpoint supplémentaire n’est nécessaire pour les lire, elles reviennent en ligne partout où des métadonnées sont renvoyées.

{
"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"
}
}
}
ChampTypeRemarques
urlstringLa cible du lien.
textstringTexte d’affichage du lien.
_p3d_typestringToujours urn:primitive:obj:external-link.

Un lien externe est autonome; définissez l’objet directement lors d’une écriture de métadonnées, sans upload requis.

ChampTypeRemarques
namestringNom de fichier d’origine.
idstringLe fileId de la pièce jointe, obtenu via le flux d’upload ci-dessous.
_p3d_typestringToujours urn:primitive:obj:attachment.

Contrairement au lien externe, une valeur attachment référence un fichier qui doit d’abord exister. Le téléverser est une séquence d’appels distincte et en plusieurs étapes, couverte ci-dessous.

Obtenir un fichier référencé comme valeur attachment est une séquence en trois étapes : initier l’upload, téléverser les parties vers S3, le finaliser; puis utiliser l’identifiant de fichier renvoyé comme champ id d’une valeur attachment lors de votre prochaine écriture de métadonnées.

MéthodeCheminScopeObjectif
POST/v1/twin/{contextId}/object/attachmentswrite:assetInitier un upload de pièce jointe
GET/v1/twin/{contextId}/object/attachments/{fileId}/refresh/{startIndex}write:assetRéémettre des URL de parties expirées
POST/v1/twin/{contextId}/object/attachments/{fileId}/finalizewrite:assetFinaliser l’upload
GET/v1/twin/{contextId}/object/attachments/{fileId}/downloadread:assetObtenir une URL de téléchargement signée
DELETE/v1/twin/{contextId}/object/attachments/{fileId}write:assetSupprimer une pièce jointe

contextId est le twin, le site ou le brouillon auquel appartient la pièce jointe; le même identifiant que celui utilisé pour la recherche d’objets métier.

L’upload lui-même suit la même mécanique générique initiate → upload des parties → finalize utilisée ailleurs dans l’API (multipart, URL S3 présignées, renouvelables en cas d’expiration). Consultez la référence d’upload multipart partagée pour cette mécanique et son piège de numérotation des parties. Cette section couvre uniquement ce qui est spécifique aux pièces jointes.

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?…" }
]
}

PUT chaque bloc vers son url présignée, en conservant l’ETag renvoyé pour chaque partie, exactement comme décrit dans la référence d’upload multipart partagée.

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
}

Étape 4 : référencer le fichier dans les métadonnées

Section intitulée « Étape 4 : référencer le fichier dans les métadonnées »

Prenez le fileId de la réponse de finalisation et définissez-le comme id d’une valeur attachment lors de votre prochaine écriture de métadonnées :

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"
}
}
}
}

Une écriture de métadonnées prend l’objet de métadonnées complet (sections et propriétés nouvelles, mises à jour et supprimées ensemble), et non un correctif d’une seule propriété. Incluez donc chaque section et propriété que vous souhaitez conserver en plus de la nouvelle référence attachment.

GET /v1/twin/{contextId}/object/{objectId}/metadata renvoie chaque propriété exactement telle qu’elle a été écrite : un string/nombre/booléen simple, ou l’un des deux objets tagués ci-dessus avec _p3d_type intact. Il n’y a pas d’étape de « résolution » séparée pour lire une valeur taguée; l’objet lui-même, y compris l’id de la pièce jointe, revient en ligne dans la réponse de métadonnées.

Pour obtenir les octets du fichier, transmettez cet id comme fileId à l’endpoint de téléchargement ci-dessous.

GET {api_url}/v1/twin/{contextId}/object/attachments/{fileId}/download
Authorization: Bearer {access_token}
{ "url": "https://d111111abcdef8.cloudfront.net/…" }

L’URL renvoyée est un lien CloudFront signé, valable environ 4 heures. Récupérez-en une nouvelle si elle expire.

Pour supprimer le fichier sous-jacent d’une pièce jointe :

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

Le stockage des pièces jointes repose sur la même allocation de stockage par organisation que tout autre fichier dans RealityConnect; il n’existe pas de « quota de pièces jointes » distinct.

QuestionRéponse
Taille maximale d’une pièce jointe uniqueAucune limite de taille dédiée n’est appliquée. Le plafond pratique est l’espace de stockage restant de votre organisation.
Nombre maximal de pièces jointes par objetAucune limite de nombre dédiée n’est appliquée. Une section de métadonnées peut contenir un nombre quelconque de propriétés de type attachment.
Total par twin ou par organisationIl n’existe pas de quota de pièces jointes distinct. Chaque pièce jointe est stockée comme un fichier ordinaire et compte dans l’allocation de stockage globale de votre organisation; le même compteur que celui utilisé par tout autre fichier téléversé. StorageLimitExceeded (voir Codes d’erreur) est renvoyé dès que l’utilisation dépasse le stockage alloué à votre organisation. Cette allocation dépend du plan souscrit ; il n’y a donc pas de chiffre unique à publier ici; consultez votre équipe de compte Prevu3D pour connaître le chiffre de votre organisation.
Types de fichiers acceptésTout mimeType que vous envoyez est accepté ; il n’y a pas de liste blanche à respecter.
Même fichier joint à plusieurs objetsStocké une fois par upload, pas une fois par référence. Téléverser deux fois les mêmes octets (deux séquences initiate → finalize distinctes) crée deux fichiers stockés séparément; il n’y a pas de déduplication automatique. Pour joindre un même document partagé à plusieurs objets sans le stocker deux fois, téléversez-le une fois et réutilisez l’id renvoyé dans la valeur attachment de chaque objet plutôt que de le téléverser à nouveau.