Freigeben über


Hinzufügen von Blobs zu Objekten in Azure Digital Twins

Wichtig

Eine neue Version des Azure Digital Twins-Diensts wurde veröffentlicht. Angesichts der erweiterten Funktionen des neuen Diensts wurde der ursprüngliche Azure Digital Twins-Dienst (in diesem Dokumentationssatz beschrieben) eingestellt.

Um die Dokumentation für den neuen Dienst anzuzeigen, besuchen Sie die aktive Azure Digital Twins-Dokumentation.

Blobs sind unstrukturierte Darstellungen gängiger Dateitypen (z. B. Bilder oder Protokolle). Blobs verfolgen mithilfe eines MIME-Typs (beispielsweise „image/jpeg“) sowie Metadaten (Name, Beschreibung, Typ usw.) die Art der dargestellten Daten nach.

Azure Digital Twins unterstützt das Anfügen von Blobs an Geräte, Räume und Benutzer. Blobs können ein Profilbild für einen Benutzer, ein Gerätefoto, ein Video, eine Karte, ein Firmware-ZIP-Archiv, JSON-Daten, ein Protokoll o.ä. darstellen.

In diesem Artikel wird eine gewisse Vertrautheit mit der Authentifizierung bei den Azure Digital Twins-Verwaltungs-APIs vorausgesetzt.

Hochladen von Blobs – Übersicht

Sie können Blobs unter Verwendung mehrteiliger Anforderungen in bestimmte Endpunkte und deren jeweilige Funktionen hochladen.

Hinweis

Mehrteilige Anforderungen umfassen in der Regel drei Informationselemente:

  • Inhaltstypheader:
    • application/json; charset=utf-8
    • multipart/form-data; boundary="USER_DEFINED_BOUNDARY"
  • Eine Inhaltsverfügung:
    • form-data; name="metadata"
  • Der hochzuladende Dateiinhalt

Content-Type und Content-Disposition variieren je nach Verwendungsszenario.

Mehrteilige Anforderungen können programmgesteuert vorgenommen werden (über C#), über einen REST-Client oder Tools wie z.B. Postman. REST-Clienttools weisen möglicherweise verschiedene Ebenen der Unterstützung für komplexe mehrteiligen Anforderungen auf. Konfigurationseinstellungen können von Tool zu Tool leicht variieren. Überprüfen Sie, welches Tool am besten für Ihre Anforderungen geeignet ist.

Wichtig

Mehrteilige Anforderungen an Verwaltungs-APIs von Azure Digital Twins bestehen normalerweise aus zwei Teilen:

  • Blobmetadaten (z.B. ein zugeordneter MIME-Typ), der von Content-Type und/oder Content-Disposition deklariert wird.
  • Blobinhalt einschließlich der unstrukturierten Inhalte einer hochzuladenden Datei

Bei PATCH-Anforderungen wird keiner der beiden Teile benötigt. Bei POST- oder Erstellungsvorgängen werden dagegen beide Teile benötigt.

Der Occupancy Quickstart-Quellcode enthält vollständige C#-Beispiele, die zeigen, wie mehrteilige Anforderungen an die Verwaltungs-APIs von digitalen Zwillingen in Azure gerichtet werden.

Blobmetadaten

Neben Content-Type und Content-Disposition müssen mehrteilige Anforderungen für Azure Digital Twins-Blobs auch den richtigen JSON-Text angeben. Der zu übermittelnde JSON-Text hängt von der Art des ausgeführten HTTP-Anforderungsvorgangs ab.

Nachfolgend finden Sie die vier wichtigsten JSON-Schemas:

JSON-Schemas

JSON-Blobmetadaten entsprechen dem folgenden Modell:

{
    "parentId": "00000000-0000-0000-0000-000000000000",
    "name": "My First Blob",
    "type": "Map",
    "subtype": "GenericMap",
    "description": "A well chosen description",
    "sharing": "None"
  }
attribute type Beschreibung
parentId String Die übergeordnete Entität, der das Blob zugeordnet werden soll (Räume, Geräte oder Benutzer)
name String Ein benutzerfreundlicher Name für das Blob
type String Der Blobtyp: type und typeId können nicht verwendet werden.
Typeid Ganzzahl Die Blobtyp-ID: type und typeId können nicht verwendet werden.
subtype String Der Blobuntertyp: subtype und subtypeId können nicht verwendet werden.
subtypeId Ganzzahl Die Untertyp-ID des Blobs: subtype und subtypeId können nicht verwendet werden.
Beschreibung String Benutzerdefinierte Beschreibung des Blobs
sharing String Gibt an, ob das Blob freigegeben werden kann: Enumeration [None, Tree, Global]

Blobmetadaten werden immer als erster Block mit Content-Type application/json oder als .json-Datei angegeben. Dateidaten werden im zweiten Block als einer der unterstützten MIME-Typen angegeben.

In der Swagger-Dokumentation werden diese Modell-Schemas umfassend beschrieben.

Tipp

Es wird eine Swagger-Vorschau bereitgestellt, um den API-Funktionsumfang zu veranschaulichen. Diese Vorschau finden Sie unter docs.westcentralus.azuresmartspaces.net/management/swagger.

Ihre eigene generierte Dokumentation von Verwaltungs-API-Swagger finden Sie unter:

https://YOUR_INSTANCE_NAME.YOUR_LOCATION.azuresmartspaces.net/management/swagger
Name Ersetzen mit
YOUR_INSTANCE_NAME Den Namen Ihrer Azure Digital Twins-Instanz
YOUR_LOCATION Die Serverregion, in der Ihre Instanz gehostet wird

Informationen zur Verwendung der Referenzdokumentation finden Sie unter Verwenden von Azure Digital Twins-Swagger.

Antwortdaten der Blobs

Einzeln zurückgegebene Blobs haben folgendes JSON-Schema:

{
  "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"
  ]
}
attribute type Beschreibung
id String Der eindeutige Bezeichner für das Blob
name String Ein benutzerfreundlicher Name für das Blob
parentId String Die übergeordnete Entität, der das Blob zugeordnet werden soll (Räume, Geräte oder Benutzer)
type String Der Blobtyp: type und typeId können nicht verwendet werden.
Typeid Ganzzahl Die Blobtyp-ID: type und typeId können nicht verwendet werden.
subtype String Der Blobuntertyp: subtype und subtypeId können nicht verwendet werden.
subtypeId Ganzzahl Die Untertyp-ID des Blobs: subtype und subtypeId können nicht verwendet werden.
sharing String Gibt an, ob das Blob freigegeben werden kann: Enumeration [None, Tree, Global]
Beschreibung String Benutzerdefinierte Beschreibung des Blobs
contentInfos Array Gibt unstrukturierte Metadateninformationen an, einschließlich der Version
fullName String Der vollständige Name des Blobs
spacePaths String Der Raumpfad

Blobmetadaten werden immer als erster Block mit Content-Type application/json oder als .json-Datei angegeben. Dateidaten werden im zweiten Block als einer der unterstützten MIME-Typen angegeben.

Beispiele für mehrteilige Blobanforderung

In den folgenden Beispielen bezieht sich YOUR_MANAGEMENT_API_URL auf den URI der Digital Twins-APIs:

https://YOUR_INSTANCE_NAME.YOUR_LOCATION.azuresmartspaces.net/management/api/v1.0
Name Ersetzen mit
YOUR_INSTANCE_NAME Den Namen Ihrer Azure Digital Twins-Instanz
YOUR_LOCATION Die Region, in der Ihre Instanz gehostet wird

Um eine Textdatei als Blob hochzuladen und einem Bereich zuzuordnen, richten Sie eine authentifizierte HTTP POST-Anforderung an:

YOUR_MANAGEMENT_API_URL/spaces/blobs

Verwenden Sie folgenden Text:

--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--
Wert Ersetzen mit
USER_DEFINED_BOUNDARY Name für die Begrenzung mehrteiliger Inhalte

Der folgende Code ist eine .NET-Implementierung des gleichen Blob-Uploads mit der Klasse 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);

Abschließend können cURL-Benutzer auf die gleiche Weise mehrteilige Anforderungen ausführen:

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"
Wert Ersetzen mit
YOUR_TOKEN Das gültige OAuth 2.0-Token
YOUR_SPACE_ID Die ID des Raums, der dem Blob zugeordnet werden soll
PATH_TO_FILE Der Pfad zur Textdatei

cURL-Beispiel

Eine erfolgreiche POST-Anforderung gibt die ID des neuen Blobs zurück.

API-Endpunkte

Die folgenden Abschnitte beschreiben die wichtigsten blobbezogenen API-Endpunkte und ihre Funktionen.

Geräte

Blobs können an Geräte angefügt werden. Die folgende Abbildung zeigt die Swagger-Referenzdokumentation für Ihre Verwaltungs-APIs. Sie gibt gerätebezogene API-Endpunkte für die Blobnutzung sowie ggf. zu übergebende erforderliche Pfadparameter an.

Geräteblobs

Wenn Sie beispielsweise ein Blob aktualisieren oder erstellen und dann an ein Gerät anfügen möchten, richten Sie eine authentifizierte HTTP PATCH-Anforderung an:

YOUR_MANAGEMENT_API_URL/devices/blobs/YOUR_BLOB_ID
Parameter Ersetzen mit
YOUR_BLOB_ID Die gewünschte Blob-ID

Erfolgreiche Anforderungen geben ein JSON-Objekt zurück, wie weiter oben beschrieben.

Leerzeichen

Blobs können auch an Räume angefügt werden. Die folgende Abbildung enthält alle Raum-API-Endpunkte für die Verarbeitung von Blobs. Aufgelistet sind auch alle Pfadparameter, die ggf. an diese Endpunkte übergeben werden müssen.

Raumblobs

Wenn beispielsweise ein an einen Raum angefügtes Blob zurückgegeben werden soll, richten Sie eine authentifizierte HTTP GET-Anforderung an:

YOUR_MANAGEMENT_API_URL/spaces/blobs/YOUR_BLOB_ID
Parameter Ersetzen mit
YOUR_BLOB_ID Die gewünschte Blob-ID

Erfolgreiche Anforderungen geben ein JSON-Objekt zurück, wie weiter oben beschrieben.

Eine PATCH-Anforderung an denselben Endpunkt aktualisiert die Metadatenbeschreibungen und erstellt Versionen des Blobs. Die HTTP-Anforderung wird unter Verwendung der PATCH-Methode zusammen mit den erforderlichen Metadaten und mehrteiligen Formulardaten ausgeführt.

Benutzer

Blobs können an Benutzermodelle angefügt werden (z. B. um ein Profilbild zuzuordnen). Die folgende Abbildung zeigt die relevanten Benutzer-API-Endpunkte sowie alle ggf. erforderlichen Pfadparameter (z. B. id):

Benutzerblobs

Wenn Sie beispielsweise ein Blob abrufen möchten, das an einen Benutzer angefügt ist, richten Sie eine authentifizierte HTTP GET-Anforderung mit den erforderlichen Formulardaten an:

YOUR_MANAGEMENT_API_URL/users/blobs/YOUR_BLOB_ID
Parameter Ersetzen mit
YOUR_BLOB_ID Die gewünschte Blob-ID

Erfolgreiche Anforderungen geben ein JSON-Objekt zurück, wie weiter oben beschrieben.

Häufige Fehler

  • Ein häufiger Fehler ist die Verwendung falscher Headerinformationen:

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

    Um diesen Fehler zu beheben, stellen Sie sicher, dass die gesamte Anforderung einen geeigneten Content-Type-Header aufweist:

    • multipart/mixed
    • multipart/form-data

    Vergewissern Sie sich außerdem, dass jeder mehrteilige Block einen geeigneten zugehörigen Content-Type aufweist.

  • Ein zweiter häufiger Fehler tritt auf, wenn derselben Ressource in Ihrem Raumintelligenzgraph mehrere Blobs zugewiesen werden:

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

    Hinweis

    Das message-Attribut variiert abhängig von der Ressource.

    An jede Ressource im räumlichen Diagramm kann nur ein Blob (jeweils pro Typ) angefügt werden.

    Aktualisieren Sie zum Beheben dieses Fehlers das vorhandene Blob, indem Sie den entsprechenden API HTTP PATCH-Vorgang anwenden. Dadurch werden die vorhandenen Blobdaten durch die gewünschten Daten ersetzt.

Nächste Schritte