Condividi tramite


Aggiungere BLOB agli oggetti in Gemelli digitali di Azure

Importante

È stata rilasciata una nuova versione del servizio Gemelli digitali di Azure. Alla luce delle funzionalità espanse del nuovo servizio, il servizio Gemelli digitali di Azure originale (descritto in questo set di documentazione) è stato ritirato.

Per visualizzare la documentazione per il nuovo servizio, vedere la documentazione attiva di Gemelli digitali di Azure.

I BLOB sono rappresentazioni non strutturate di tipi di file comuni, ad esempio immagini e log. I BLOB tengono traccia del tipo di dati che rappresentano tramite l'uso di un tipo MIME (ad esempio "image/jpeg") e dei metadati (nome, descrizione, tipo e così via).

Gemelli digitali di Azure supporta il collegamento dei BLOB a dispositivi, spazi e utenti. I BLOB possono rappresentare un'immagine del profilo di un utente, una foto del dispositivo, un video, una mappa, un file zip del firmware, dati JSON, un log, ecc.

Questo articolo presuppone una certa familiarità con l'autenticazione con le API di gestione di Gemelli digitali di Azure.

  • Per altre informazioni sull'autenticazione con le API di gestione, vedere Autenticazione con le API di Gemelli digitali di Azure.
  • Per eseguire l'autenticazione con le API di gestione usando il client REST di Postman, leggere Come configurare Postman.

Panoramica sul caricamento dei BLOB

È possibile usare richieste multipart per caricare i BLOB e le relative funzionalità in endpoint specifici.

Nota

Per le richieste multipart in genere sono necessari tre elementi:

  • Intestazione Content-Type :
    • application/json; charset=utf-8
    • multipart/form-data; boundary="USER_DEFINED_BOUNDARY"
  • Disposizione del contenuto:
    • form-data; name="metadata"
  • Il contenuto del file da caricare

Il contenuto di Content-Type e Content-Disposition varia in base allo scenario.

Le richieste multipart possono essere effettuate a livello di programmazione (tramite C#), mediante un client REST o con uno strumento come Postman. Gli strumenti client REST possono avere vari livelli di supporto per le richieste multipart complesse. Le impostazioni di configurazione possono inoltre variare leggermente da strumento a strumento. Verificare quale strumento è più adatto alle proprie esigenze.

Importante

Le richieste multipart inviate alle API Gestione di Gemelli digitali di Azure sono in genere suddivise in due parti:

  • Metadati BLOB, ad esempio un tipo MIME associato, dichiarati da Content-Type e/o Content-Disposition
  • Contenuto BLOB che include il contenuto non strutturato di un file da caricare

Per le richieste PATCH non è necessaria nessuna delle due parti, mentre entrambe sono necessarie per le operazioni POST o di creazione.

Il codice sorgente dell'avvio rapido relativo all'occupazione contiene esempi C# completi che illustrano come effettuare richieste multipart alle API di gestione di Gemelli digitali di Azure.

Metadati BLOB

Oltre a Content-Type e Content-Disposition, le richieste multipart BLOB di Gemelli digitali di Azure devono specificare il corpo JSON corretto. Il corpo JSON da inviare dipende dal tipo di operazione di richiesta HTTP che viene eseguita.

I quattro schemi JSON principali sono i seguenti:

Schemi JSON

I metadati dei BLOB JSON sono conformi al modello seguente:

{
    "parentId": "00000000-0000-0000-0000-000000000000",
    "name": "My First Blob",
    "type": "Map",
    "subtype": "GenericMap",
    "description": "A well chosen description",
    "sharing": "None"
  }
Attributo Tipo Descrizione
parentId String Entità padre a cui associare il BLOB (spazi, dispositivi o utenti)
name string Nome descrittivo per il BLOB
type String Tipo di BLOB: non è possibile usare type e typeId
typeId Intero ID del tipo di BLOB: non è possibile usare type e typeId
subtype String Sottotipo di BLOB: non è possibile usare type e subtypeId
subtypeId Intero ID del sottotipo di BLOB: non è possibile usare subtype e subtypeId
description Stringa Descrizione personalizzata del BLOB
sharing String Indica se il BLOB può essere condiviso: enumerazione [None, Tree, Global]

I metadati BLOB vengono sempre forniti come primo blocco con Content-Type application/json o come .json file. I dati dei file vengono specificati nel secondo blocco e possono essere di qualsiasi tipo MIME supportato.

La documentazione di Swagger descrive in dettaglio questi schemi del modello.

Suggerimento

Viene fornita un'anteprima di prova di Swagger per mostrare il set di funzionalità delle API. L'anteprima è ospitata in docs.westcentralus.azuresmartspaces.net/management/swagger.

È possibile accedere alla propria documentazione di Swagger generata automaticamente dell'API di gestione all'indirizzo:

https://YOUR_INSTANCE_NAME.YOUR_LOCATION.azuresmartspaces.net/management/swagger
Nome Replace with
NOME_ISTANZA_UTENTE Nome dell'istanza di Gemelli digitali di Azure
POSIZIONE_UTENTE Area del server in cui è ospitata l'istanza

Per informazioni sull'uso della documentazione di riferimento, vedere Come usare Swagger.

Dati della risposta dei BLOB

I BLOB restituiti singolarmente sono conformi allo schema JSON seguente:

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "parentId": "00000000-0000-0000-0000-000000000000",
  "type": "string",
  "subtype": "string",
  "typeId": 0,
  "subtypeId": 0,
  "sharing": "None",
  "description": "string",
  "contentInfos": [
    {
      "type": "string",
      "sizeBytes": 0,
      "mD5": "string",
      "version": "string",
      "lastModifiedUtc": "2019-01-12T00:58:08.689Z",
      "metadata": {
        "additionalProp1": "string",
        "additionalProp2": "string",
        "additionalProp3": "string"
      }
    }
  ],
  "fullName": "string",
  "spacePaths": [
    "string"
  ]
}
Attributo Tipo Descrizione
id String Identificatore univoco per il BLOB
name string Nome descrittivo per il BLOB
parentId String Entità padre a cui associare il BLOB (spazi, dispositivi o utenti)
type String Tipo di BLOB: non è possibile usare type e typeId
typeId Intero ID del tipo di BLOB: non è possibile usare type e typeId
subtype String Sottotipo di BLOB: non è possibile usare type e subtypeId
subtypeId Intero ID del sottotipo di BLOB: non è possibile usare subtype e subtypeId
sharing String Indica se il BLOB può essere condiviso: enumerazione [None, Tree, Global]
description Stringa Descrizione personalizzata del BLOB
contentInfos Matrice Specifica le informazioni dei metadati non strutturati, inclusa la versione
fullName String Nome completo del BLOB
spacePaths String Percorso dello spazio

I metadati BLOB vengono sempre forniti come primo blocco con Content-Type application/json o come .json file. I dati dei file vengono specificati nel secondo blocco e possono essere di qualsiasi tipo MIME supportato.

Esempi di richiesta multipart di BLOB

Negli esempi seguenti, YOUR_MANAGEMENT_API_URL fa riferimento all'URI delle API di Gemelli digitali:

https://YOUR_INSTANCE_NAME.YOUR_LOCATION.azuresmartspaces.net/management/api/v1.0
Nome Replace with
NOME_ISTANZA_UTENTE Nome dell'istanza di Gemelli digitali di Azure
POSIZIONE_UTENTE Area in cui è ospitata l'istanza

Per caricare un file di testo come BLOB e associarlo a uno spazio, inviare una richiesta HTTP POST autenticata al percorso seguente:

YOUR_MANAGEMENT_API_URL/spaces/blobs

Con il corpo seguente:

--USER_DEFINED_BOUNDARY
Content-Type: application/json; charset=utf-8
Content-Disposition: form-data; name="metadata"

{
  "ParentId": "54213cf5-285f-e611-80c3-000d3a320e1e",
  "Name": "My First Blob",
  "Type": "Map",
  "SubType": "GenericMap",
  "Description": "A well chosen description",
  "Sharing": "None"
}
--USER_DEFINED_BOUNDARY
Content-Disposition: form-data; name="contents"; filename="myblob.txt"
Content-Type: text/plain

This is my blob content. In this case, some text, but I could also be uploading a picture, an JSON file, a firmware zip, etc.

--USER_DEFINED_BOUNDARY--
Valore Replace with
USER_DEFINED_BOUNDARY Nome di un limite di contenuto multipart

Il codice seguente è un'implementazione .NET dello stesso caricamento di BLOB tramite la classe MultipartFormDataContent:

//Supply your metadata in a suitable format
var multipartContent = new MultipartFormDataContent("USER_DEFINED_BOUNDARY");

var metadataContent = new StringContent(JsonConvert.SerializeObject(metaData), Encoding.UTF8, "application/json");
metadataContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
multipartContent.Add(metadataContent, "metadata");

//MY_BLOB.txt is the String representation of your text file
var fileContents = new StringContent("MY_BLOB.txt");
fileContents.Headers.ContentType = MediaTypeHeaderValue.Parse("text/plain");
multipartContent.Add(fileContents, "contents");

var response = await httpClient.PostAsync("spaces/blobs", multipartContent);

Gli utenti di cURL possono infine eseguire richieste di moduli multipart nello stesso modo:

curl -X POST "YOUR_MANAGEMENT_API_URL/spaces/blobs" \
 -H "Authorization: Bearer YOUR_TOKEN" \
 -H "Accept: application/json" \
 -H "Content-Type: multipart/form-data" \
 -F "meta={\"ParentId\":\"YOUR_SPACE_ID\",\"Name\":\"My CURL Blob\",\"Type\":\"Map\",\"SubType\":\"GenericMap\",\"Description\":\"A well chosen description\",\"Sharing\":\"None\"};type=application/json" \
 -F "text=PATH_TO_FILE;type=text/plain"
Valore Replace with
YOUR_TOKEN Il proprio token OAuth 2.0 valido
YOUR_SPACE_ID L'ID dello spazio a cui associare il BLOB
PATH_TO_FILE Il percorso del file di testo

Esempio di cURL

Un POST riuscito restituisce l'ID del nuovo BLOB.

Endpoint API

Le sezioni seguenti descrivono i principali endpoint API correlati ai BLOB e le relative funzionalità.

Dispositivi

È possibile associare i BLOB a dispositivi. L'immagine seguente illustra la documentazione di riferimento di Swagger per le API Gestione. Specifica gli endpoint API associati al dispositivo per l'uso di BLOB ed eventuali parametri di percorso richiesti da passare al loro interno.

BLOB correlati ai dispositivi

Ad esempio, per aggiornare o creare un BLOB e collegarlo a un dispositivo inviare una richiesta HTTP PATCH autenticata al percorso seguente:

YOUR_MANAGEMENT_API_URL/devices/blobs/YOUR_BLOB_ID
Parametro Replace with
YOUR_BLOB_ID ID del BLOB desiderato

Le richieste con esito positivo restituiscono un oggetto JSON, come descritto in precedenza.

Spazi

È anche possibile associare i BLOB a spazi. L'immagine seguente elenca tutti gli endpoint API di spazi responsabili della gestione di BLOB. Elenca anche i parametri di percorso da passare in tali endpoint.

BLOB correlati agli spazi

Ad esempio, per restituire un BLOB collegato a uno spazio, inviare una richiesta HTTP GET autenticata al percorso seguente:

YOUR_MANAGEMENT_API_URL/spaces/blobs/YOUR_BLOB_ID
Parametro Replace with
YOUR_BLOB_ID ID del BLOB desiderato

Le richieste con esito positivo restituiscono un oggetto JSON, come descritto in precedenza.

Una richiesta PATCH allo stesso endpoint aggiorna le descrizioni dei metadati e crea le versioni del BLOB. La richiesta HTTP viene effettuata tramite il metodo PATCH con tutti i metadati e i dati modulo multipart necessari.

Utenti

È possibile collegare BLOB a modelli utente (ad esempio per associare un'immagine del profilo). L'immagine seguente illustra gli endpoint API utente pertinenti e i parametri di percorso necessari, ad esempio id:

BLOB correlati agli utenti

Ad esempio, per recuperare un BLOB collegato a un utente, inviare una richiesta HTTP GET autenticata con tutti i dati modulo necessari:

YOUR_MANAGEMENT_API_URL/users/blobs/YOUR_BLOB_ID
Parametro Replace with
YOUR_BLOB_ID ID del BLOB desiderato

Le richieste con esito positivo restituiscono un oggetto JSON, come descritto in precedenza.

Errori comuni

  • Un errore comune è quello di non specificare le informazioni di intestazione corrette:

    {
        "error": {
            "code": "400.600.000.000",
            "message": "Invalid media type in first section."
        }
    }
    

    Per risolvere questo errore, verificare che la richiesta generale abbia un'intestazione Content-Type appropriata:

    • multipart/mixed
    • multipart/form-data

    Verificare inoltre che ogni blocco multipart abbia un tipo di contenuto appropriato.

  • Un secondo errore comune si verifica quando più BLOB vengono assegnati alla stessa risorsa nel grafico di intelligenza spaziale:

    {
        "error": {
            "code": "400.600.000.000",
            "message": "SpaceBlobMetadata already exists."
        }
    }
    

    Nota

    L'attributo del messaggio varia in base alla risorsa.

    Un solo BLOB (di ogni tipo) può essere collegato a ogni risorsa all'interno del grafico spaziale.

    Per risolvere questo errore, aggiornare il BLOB esistente usando l'operazione PATCH HTTP API appropriata. In questo modo i dati BLOB esistenti verranno sostituiti con i dati desiderati.

Passaggi successivi