Salta ai contenuti

Valori di metadati tipizzati e allegati

Le proprietà di metadati degli oggetti business (metadata su GET/PATCH /v1/twin/{contextId}/object/{objectId}/metadata) non sono limitate a semplici string, numeri e booleani. Un valore di proprietà può anche essere un oggetto taggato che porta un campo speciale _p3d_type, usato per rappresentare un link esterno o un allegato di file caricato. Questa pagina documenta questa unione di valori e il flusso di upload dietro il tipo attachment.


Ogni proprietà all’interno di una sezione di metadati è una delle seguenti:

Tipo di valoreForma
String semplice"A short text"
Numero semplice42
Booleano semplicetrue
Link esterno{ "url": "...", "text": "...", "_p3d_type": "urn:primitive:obj:external-link" }
Allegato{ "name": "...", "id": "...", "_p3d_type": "urn:primitive:obj:attachment" }

_p3d_type è il discriminatore: il suo valore letterale indica quale delle due forme taggate stai osservando. Entrambe le forme taggate sono altrimenti semplici oggetti: non serve alcun endpoint aggiuntivo per leggerle, tornano inline ovunque vengano restituiti i metadati.

{
"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"
}
}
}
CampoTipoNote
urlstringLa destinazione del link.
textstringTesto visualizzato per il link.
_p3d_typestringSempre urn:primitive:obj:external-link.

Un link esterno è autonomo; imposta l’oggetto direttamente in una scrittura di metadati, senza alcun upload coinvolto.

CampoTipoNote
namestringNome file originale.
idstringIl fileId dell’allegato, ottenuto dal flusso di upload sottostante.
_p3d_typestringSempre urn:primitive:obj:attachment.

A differenza del link esterno, un valore attachment fa riferimento a un file che deve prima esistere. Caricarlo è una sequenza di chiamate separata e in più fasi, trattata di seguito.

Ottenere che un file venga referenziato come valore attachment è una sequenza in tre fasi: avviare l’upload, caricare le parti su S3, finalizzarlo; quindi usare l’id file restituito come campo id di un valore attachment nella successiva scrittura di metadati.

MetodoPercorsoAmbitoScopo
POST/v1/twin/{contextId}/object/attachmentswrite:assetAvviare un upload di allegato
GET/v1/twin/{contextId}/object/attachments/{fileId}/refresh/{startIndex}write:assetRiemettere URL delle parti scadute
POST/v1/twin/{contextId}/object/attachments/{fileId}/finalizewrite:assetFinalizzare l’upload
GET/v1/twin/{contextId}/object/attachments/{fileId}/downloadread:assetOttenere un URL di download firmato
DELETE/v1/twin/{contextId}/object/attachments/{fileId}write:assetRimuovere un allegato

contextId è il twin, il site o il draft a cui appartiene l’allegato; lo stesso id usato per la ricerca di oggetti business.

L’upload stesso segue la stessa meccanica generica di avvio → caricamento delle parti → finalizzazione usata altrove nell’API (multipart, URL S3 presigned, rinnovabili in caso di scadenza). Consulta il riferimento condiviso per l’upload multipart per questa meccanica e la sua trappola sulla numerazione delle parti. Questa sezione copre solo ciò che è specifico degli allegati.

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

Esegui PUT di ogni blocco verso il suo url presigned, conservando l’ETag restituito per ogni parte, esattamente come descritto nel riferimento condiviso per l’upload multipart.

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
}

Prendi il fileId dalla risposta di finalizzazione e impostalo come id di un valore attachment nella successiva scrittura di metadati:

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

Una scrittura di metadati riceve l’intero oggetto di metadati (sezioni e proprietà nuove, aggiornate e rimosse insieme), non una patch di una singola proprietà. Includi quindi ogni sezione e proprietà che vuoi mantenere insieme al nuovo riferimento all’allegato.

GET /v1/twin/{contextId}/object/{objectId}/metadata restituisce ogni proprietà esattamente come è stata scritta: una string/numero/booleano semplice, oppure uno dei due oggetti taggati sopra con _p3d_type intatto. Non esiste una fase di “risoluzione” separata per leggere un valore taggato; l’oggetto stesso, incluso l’id dell’allegato, torna inline nella risposta dei metadati.

Per ottenere i byte del file, passa quell’id come fileId all’endpoint di download sottostante.

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

L’URL restituito è un link CloudFront firmato, valido per circa 4 ore. Richiedine uno nuovo se scade.

Per rimuovere il file sottostante di un allegato:

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

L’archiviazione degli allegati utilizza la stessa allocazione di spazio di archiviazione per organizzazione di qualsiasi altro file in RealityConnect; non esiste una “quota allegati” separata.

DomandaRisposta
Dimensione massima di un singolo allegatoNon viene applicato alcun limite di dimensione dedicato. Il limite pratico è lo spazio di archiviazione residuo della tua organizzazione.
Numero massimo di allegati per oggettoNon viene applicato alcun limite di conteggio dedicato. Una sezione di metadati può contenere un numero qualsiasi di proprietà di tipo attachment.
Totale per twin o per organizzazioneNon esiste una quota allegati separata. Ogni allegato viene archiviato come file normale e conta ai fini dell’allocazione complessiva di archiviazione della tua organizzazione; lo stesso contatore usato da qualsiasi altro file caricato. StorageLimitExceeded (vedi Codici di errore) viene restituito non appena l’utilizzo supera lo spazio di archiviazione allocato alla tua organizzazione. Questa allocazione dipende dal piano, quindi non c’è un numero unico da pubblicare qui; verifica con il team account Prevu3D il valore per la tua organizzazione.
Tipi di file accettatiQualsiasi mimeType tu invii viene accettato; non c’è una lista di tipi consentiti da rispettare.
Stesso file allegato a più oggettiViene archiviato una volta per caricamento, non una volta per riferimento. Caricare gli stessi byte due volte (due sequenze initiate → finalize separate) crea due file archiviati separatamente; non esiste alcuna deduplicazione automatica. Per allegare uno stesso documento condiviso a più oggetti senza archiviarlo due volte, caricalo una sola volta e riutilizza l’id restituito nel valore attachment di ciascun oggetto invece di ricaricarlo.