Freigeben über


Hochladen von Dateien von einem Gerät in die Cloud mit Azure IoT Hub

Dieser Artikel demonstriert Folgendes:

  • Verwenden Sie die Dateiuploadfunktionen von IoT Hub, um eine Datei mithilfe eines Azure IoT-Geräts und von Dienst-SDKs in Azure Blob Storage hochzuladen.
  • Benachrichtigen Sie IoT Hub, dass die Datei erfolgreich hochgeladen wurde, und erstellen Sie mithilfe der Azure IoT-Dienst-SDKs einen Back-End-Dienst, um Dateiuploadbenachrichtigungen von IoT Hub zu empfangen.

In einigen Szenarien können Sie nicht einfach die Daten, die Ihre Geräte senden, den relativ kleinen Gerät-zu-Cloud-Nachrichten zuordnen, die IoT Hub akzeptiert. Mit den Dateiuploadfunktionen in IoT Hub können Sie umfangreiche oder komplexe Daten in die Cloud verschieben. Zum Beispiel:

  • Videos
  • Große Dateien, die Bilder enthalten
  • Vibrationsdaten, die mit hoher Häufigkeit als Stichproben erfasst werden
  • Eine Form vorverarbeiteter Daten

Diese Dateien werden normalerweise als Batch in der Cloud mit Tools wie Azure Data Factory oder dem Hadoop-Stapel verarbeitet. Wenn Sie Dateien von einem Gerät hochladen müssen, können Sie weiterhin die Sicherheit und Zuverlässigkeit des IoT Hub nutzen. In diesem Artikel erfahren Sie, welche Schritte erforderlich sind.

Dieser Artikel soll die ausführbaren SDK-Beispiele ergänzen, auf die in diesem Artikel verwiesen wird.

Weitere Informationen finden Sie unter:

Wichtig

Die Funktion zum Hochladen von Dateien auf Geräten, die die Authentifizierung der X.509-Zertifizierungsstelle verwenden, befindet sich in der öffentlichen Vorschau, und der Vorschaumodus muss aktiviert werden. Sie ist allgemein verfügbar auf Geräten, die die Authentifizierung per X.509-Fingerabdruck oder den X.509-Zertifikatnachweis mit dem Azure Device Provisioning Service verwenden. Weitere Informationen zur X.509-Authentifizierung mit IoT Hub finden Sie unter Unterstützte X.509-Zertifikate.

Voraussetzungen

  • Einen IoT-Hub. Für einige SDK-Aufrufe ist die primäre IoT Hub-Verbindungszeichenfolge erforderlich. Notieren Sie sich daher die Verbindungszeichenfolge.

  • Ein registriertes Gerät. Für einige SDK-Aufrufe ist die primäre Geräteverbindungszeichenfolge erforderlich. Notieren Sie sich daher die Verbindungszeichenfolge.

  • IoT Hub-Berechtigung Dienstverbindung: Damit Ihr Back-End-Dienst Dateiuploadbenachrichtigungen empfangen kann, muss er über die Berechtigung Dienstverbindung verfügen. Standardmäßig wird jeder IoT-Hub mit einer SAS-Richtlinie namens service erstellt, die diese Berechtigung erteilt. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit einer IoT Hub-Instanz.

  • Konfigurieren Sie den Dateiupload in Ihrem IoT-Hub, indem Sie ein Azure Storage-Konto und einen Azure Blob Storage-Container verknüpfen. Verwenden Sie zum Konfigurieren das Azure-Portal, die Azure CLI oder Azure PowerShell.

Übersicht

Diese Anleitung enthält zwei Abschnitte:

  • Hochladen einer Datei von einer Geräteanwendung
  • Empfangen einer Dateiuploadbenachrichtigung in einer Back-End-Anwendung

Hochladen einer Datei von einer Geräteanwendung

In diesem Abschnitt wird beschrieben, wie Sie mithilfe der Klasse DeviceClient im Azure IoT SDK für .NET eine Datei von einem Gerät in einen IoT-Hub hochladen.

Gehen Sie wie folgt vor, um eine Datei von einem Gerät in einen IoT-Hub hochzuladen:

  1. Herstellen einer Verbindung mit dem IoT-Hub
  2. Abrufen eines SAS-URI vom IoT-Hub
  3. Hochladen der Datei in Azure Storage
  4. Benachrichtigen des IoT-Hubs über den Dateiuploadstatus

Stellen Sie eine Verbindung mit dem Gerät her.

Rufen Sie CreateFromConnectionString- auf, um eine Verbindung mit dem Gerät herzustellen. Übergeben Sie die primäre Verbindungszeichenfolge für das Gerät.

AMQP ist das Standardtransportprotokoll.

static string connectionString = "{device primary connection string}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString);

Abrufen eines SAS-URI vom IoT-Hub

Rufen Sie GetFileUploadSasUriAsync- auf, um Dateiuploaddetails abzurufen. Der SAS-URI wird im nächsten Schritt verwendet, um eine Datei von einem Gerät in Blob Storage hochzuladen.

const string filePath = "TestPayload.txt";
using var fileStreamSource = new FileStream(filePath, FileMode.Open);
var fileName = Path.GetFileName(fileStreamSource.Name);
var fileUploadSasUriRequest = new FileUploadSasUriRequest
{
    BlobName = fileName
};

FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest, System.Threading.CancellationToken cancellationToken = default);
Uri uploadUri = sasUri.GetBlobUri();

Hochladen einer Datei in Azure Storage

So laden Sie eine Datei in Azure Storage hoch

  1. Erstellen Sie ein blockBlobClient-Objekt, und übergeben Sie einen Dateiupload-URI.

  2. Verwenden Sie die Methode UploadAsync, um eine Datei in Blob Storage hochzuladen und den SAS-URI zu übergeben. Optional können Sie Blobuploadoptionen und Abbruchtokenparameter hinzufügen.

Der Azure-Blobclient verwendet immer HTTPS als Protokoll zum Hochladen der Datei in Azure Storage.

In diesem Beispiel wird der SAS-URI an BlockBlobClient übergeben, um einen Azure Storage-Blockblobclient zu erstellen, und die Datei hochgeladen:

var blockBlobClient = new BlockBlobClient(uploadUri);
await blockBlobClient.UploadAsync(fileStreamSource, null, null);

Benachrichtigen des IoT-Hubs über den Dateiuploadstatus

Verwenden Sie CompleteFileUploadAsync, um den IoT-Hub zu benachrichtigen, dass der Geräteclient den Upload abgeschlossen hat, und übergeben Sie ein FileUploadCompletionNotification-Objekt. Das Flag IsSuccess gibt an, ob der Upload erfolgreich war. Nach der Benachrichtigung gibt der IoT-Hub Ressourcen frei, die dem Upload zugeordnet sind (SAS-URI).

Wenn Dateiuploadbenachrichtigungen aktiviert sind, sendet der IoT-Hub eine Benachrichtigung über den Dateiupload an Back-End-Dienste, die für die Dateiuploadbenachrichtigung konfiguriert sind.

var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
{
    // Mandatory. Must be the same value as the correlation id returned in the sas uri response
    CorrelationId = sasUri.CorrelationId,

    // Mandatory. Will be present when service client receives this file upload notification
    IsSuccess = true,

    // Optional, user defined status code. Will be present when service client receives this file upload notification
    StatusCode = 200,

    // Optional, user-defined status description. Will be present when service client receives this file upload notification
    StatusDescription = "Success"
};

await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);

SDK-Dateiuploadbeispiel

Das SDK enthält dieses Dateiuploadbeispiel.

Empfangen einer Dateiuploadbenachrichtigung in einer Back-End-Anwendung

Sie können einen Back-End-Dienst zum Empfangen von Dateiuploadbenachrichtigungen aus dem IoT-Hub erstellen.

Die ServiceClient-Klasse enthält Methoden, mit denen Dienste Dateiuploadbenachrichtigungen empfangen können.

So empfangen Sie Dateiuploadbenachrichtigungen

  1. Rufen Sie CreateFromConnectionString auf, um eine Verbindung mit dem IoT-Hub herzustellen. Übergeben Sie die primäre Verbindungszeichenfolge für den IoT-Hub.
  2. Erstellen Sie ein Abbruchtoken (CancellationToken).
  3. Rufen Sie GetFileNotificationReceiver auf, um einen Benachrichtigungsempfänger zu erstellen.
  4. Verwenden Sie eine Schleife mit ReceiveAsync, um auf die Dateiuploadbenachrichtigung zu warten.

Zum Beispiel:

using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "{IoT hub connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

// Define the cancellation token
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;

// Create a notification receiver
var notificationReceiver = serviceClient.GetFileNotificationReceiver();
Console.WriteLine("\nReceiving file upload notification from service");

// Check for file upload notifications
while (true)
{
    var fileUploadNotification = await notificationReceiver.ReceiveAsync(token);
    if (fileUploadNotification == null) continue;
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("Received file upload notification: {0}", 
        string.Join(", ", fileUploadNotification.BlobName));
    Console.ResetColor();
    await notificationReceiver.CompleteAsync(fileUploadNotification);
}

Übersicht

Diese Anleitung enthält zwei Abschnitte:

  • Hochladen einer Datei von einer Geräteanwendung
  • Empfangen einer Dateiuploadbenachrichtigung in einer Back-End-Anwendung

Hochladen einer Datei von einer Geräteanwendung

In diesem Abschnitt wird beschrieben, wie Sie mithilfe der Klasse DeviceClient im Azure IoT SDK für Java eine Datei von einem Gerät in einen IoT-Hub hochladen.

Gehen Sie wie folgt vor, um eine Datei von einem Gerät in einen IoT-Hub hochzuladen:

  1. Stellen Sie eine Verbindung mit dem Gerät her.
  2. Abrufen eines SAS-URI vom IoT-Hub
  3. Hochladen der Datei in Azure Storage
  4. Senden einer Benachrichtigung über den Dateiuploadstatus an den IoT-Hub

Verbindungsprotokoll

Dateiuploadvorgänge verwende immer HTTPS, aber DeviceClient kann IotHubClientProtocol für andere Dienste wie Telemetrie, Gerätemethode und Gerätezwilling definieren.

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

Stellen Sie eine Verbindung mit dem Gerät her.

Instanziieren Sie DeviceClient, um unter Verwendung der primären Verbindungszeichenfolge des Geräts eine Verbindung mit dem Gerät herzustellen.

String connString = "{IoT hub connection string}";
DeviceClient client = new DeviceClient(connString, protocol);

Abrufen eines SAS-URI vom IoT-Hub

Rufen Sie getFileUploadSasUri auf, um ein FileUploadSasUriResponse-Objekt abzurufen.

FileUploadSasUriResponse enthält diese Methoden und Rückgabewerte. Die Rückgabewerte können an Dateiuploadmethoden übergeben werden.

Methode Rückgabewert
getCorrelationId() Korrelations-ID
getContainerName() Containername
getBlobName() Blobname
getBlobUri() Blob-URI

Zum Beispiel:

FileUploadSasUriResponse sasUriResponse = client.getFileUploadSasUri(new FileUploadSasUriRequest(file.getName()));

System.out.println("Successfully got SAS URI from IoT hub");
System.out.println("Correlation Id: " + sasUriResponse.getCorrelationId());
System.out.println("Container name: " + sasUriResponse.getContainerName());
System.out.println("Blob name: " + sasUriResponse.getBlobName());
System.out.println("Blob Uri: " + sasUriResponse.getBlobUri());

Hochladen der Datei in Azure Storage

Übergeben Sie den Blob-URI-Endpunkt an BlobClientBuilder.buildclient, um das BlobClient-Objekt zu erstellen.

BlobClient blobClient =
    new BlobClientBuilder()
        .endpoint(sasUriResponse.getBlobUri().toString())
        .buildClient();

Rufen Sie uploadFromFile auf, um die Datei in Blob Storage hochzuladen.

String fullFileName = "Path of the file to upload";
blobClient.uploadFromFile(fullFileName);

Senden einer Benachrichtigung über den Dateiuploadstatus an den IoT-Hub

Senden Sie nach einem Dateiuploadversuch eine Uploadstatusbenachrichtigung an den IoT-Hub.

Erstellen Sie ein FileUploadCompletionNotification-Objekt. Übergeben Sie die Korrelations-ID (correlationId) und den Erfolgsstatus für den Dateiupload (isSuccess). Übergeben Sie den Wert true für isSuccess, wenn der Dateiupload erfolgreich war, und false, wenn er nicht erfolgreich war.

FileUploadCompletionNotification muss auch aufgerufen werden, wenn der Dateiupload nicht erfolgreich war. Der IoT-Hub verfügt über eine feste Anzahl von SAS-URIs, die zu einem bestimmten Zeitpunkt aktiv sein dürfen. Nachdem das Hochladen der Datei abgeschlossen ist, sollten Sie Ihren SAS-URI freigeben, damit ein weiterer SAS-URI generiert werden kann. Wenn ein SAS-URI nicht über diese API freigegeben wird, gibt er sich schließlich basierend auf der Dauer selbst frei, die für seine aktive Phase auf einem IoT-Hub konfiguriert wurde.

In diesem Beispiel wird der Status „Erfolgreich“ übergeben.

FileUploadCompletionNotification completionNotification = new FileUploadCompletionNotification(sasUriResponse.getCorrelationId(), true);
client.completeFileUpload(completionNotification);

Schließen des Clients

Geben Sie die client-Ressourcen frei.

client.closeNow();

Empfangen einer Dateiuploadbenachrichtigung in einer Back-End-Anwendung

Sie können eine Back-End-Anwendung zum Empfangen von Dateiuploadbenachrichtigungen erstellen.

So erstellen Sie eine Anwendung für Dateiuploadbenachrichtigungen

  1. Herstellen einer Verbindung mit dem Dienstclient für den IoT-Hub
  2. Überprüfen auf eine Benachrichtigung zum Dateiupload

Die ServiceClient-Klasse enthält Methoden, mit denen Dienste Dateiuploadbenachrichtigungen empfangen können.

Herstellen einer Verbindung mit dem Dienstclient für den IoT-Hub

Erstellen eines IotHubServiceClientProtocol-Objekts Die Verbindung verwendet das AMQPS-Protokoll.

Rufen Sie createFromConnectionString auf, um eine Verbindung mit dem IoT-Hub herzustellen. Übergeben Sie die primäre Verbindungszeichenfolge für den IoT-Hub.

private static final String connectionString = "{IoT hub primary connection string}";
private static final IotHubServiceClientProtocol protocol = IotHubServiceClientProtocol.AMQPS;
ServiceClient sc = ServiceClient.createFromConnectionString(connectionString, protocol);

Überprüfen des Dateiuploadstatus

So überprüfen Sie den Status für den Dateiupload

  1. Erstellen Sie ein getFileUploadNotificationReceiver-Objekt.
  2. Stellen Sie mithilfe von open eine Verbindung mit dem IoT-Hub her.
  3. Rufen Sie receive auf, um den Dateiuploadstatus zu überprüfen. Diese Methode gibt ein fileUploadNotification-Objekt zurück. Wenn eine Uploadbenachrichtigung empfangen wird, können Sie die Statusfelder für den Upload mithilfe von fileUploadNotification-Methoden anzeigen.

Zum Beispiel:

FileUploadNotificationReceiver receiver = sc.getFileUploadNotificationReceiver();
receiver.open();
FileUploadNotification fileUploadNotification = receiver.receive(2000);

if (fileUploadNotification != null)
{
    System.out.println("File Upload notification received");
    System.out.println("Device Id : " + fileUploadNotification.getDeviceId());
    System.out.println("Blob Uri: " + fileUploadNotification.getBlobUri());
    System.out.println("Blob Name: " + fileUploadNotification.getBlobName());
    System.out.println("Last Updated : " + fileUploadNotification.getLastUpdatedTimeDate());
    System.out.println("Blob Size (Bytes): " + fileUploadNotification.getBlobSizeInBytes());
    System.out.println("Enqueued Time: " + fileUploadNotification.getEnqueuedTimeUtcDate());
}
else
{
    System.out.println("No file upload notification");
}

// Close the receiver object
receiver.close();

SDK-Dateiuploadbeispiele

Es gibt zwei Beispiele für den Java-Dateiupload.

Installieren von Paketen

Vor dem Aufrufen des zugehörigen Codes muss die Bibliothek „azure-iot-device“ installiert werden.

pip install azure-iot-device

Das Paket azure.storage.blob wird verwendet, um den Dateiupload durchzuführen.

pip install azure.storage.blob

Hochladen einer Datei von einer Geräteanwendung

In diesem Abschnitt wird beschrieben, wie Sie mithilfe der Klasse IoTHubDeviceClient im Azure IoT SDK für Python eine Datei von einem Gerät in einen IoT-Hub hochladen.

Gehen Sie wie folgt vor, um eine Datei von einem Gerät in einen IoT-Hub hochzuladen:

  1. Stellen Sie eine Verbindung mit dem Gerät her.
  2. Abrufen der Blob Storage-Informationen
  3. Hochladen der Datei in Blob Storage
  4. Benachrichtigen des IoT-Hubs über den Uploadstatus

Importbibliotheken

import os
from azure.iot.device import IoTHubDeviceClient
from azure.core.exceptions import AzureError
from azure.storage.blob import BlobClient

Stellen Sie eine Verbindung mit dem Gerät her.

So stellen Sie eine Verbindung mit dem Gerät her

  1. Rufen Sie create_from_connection_string auf, um die primäre Verbindungszeichenfolge des Geräts hinzuzufügen.

  2. Rufen Sie connect auf, um eine Verbindung mit dem Geräteclient herzustellen.

Zum Beispiel:

# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)

# Connect the client
device_client.connect()

Abrufen der Blob Storage-Informationen

Rufen Sie get_storage_info_for_blob auf, um Informationen von einem IoT-Hub zu einem verknüpften Azure Storage-Konto abzurufen. Zu diesen Informationen gehören der Hostname, der Containername, der Blobname und ein SAS-Token. Die get_storage_info_for_blob-Methode gibt außerdem eine Korrelations-ID (correlation_id) zurück, die in der notify_blob_upload_status-Methode verwendet wird. Über correlation_id gibt IoT Hub an, an welchem Blob Sie arbeiten.

# Get the storage info for the blob
PATH_TO_FILE = "{Full path to local file}"
blob_name = os.path.basename(PATH_TO_FILE)
blob_info = device_client.get_storage_info_for_blob(blob_name)

Hochladen einer Datei in Blob Storage

So laden Sie eine Datei in Blob Storage hoch

  1. Verwenden Sie from_blob_url, um ein BlobClient-Objekt aus einer Blob-URL zu erstellen.
  2. Rufen Sie upload_blob auf, um die Datei in Blob Storage hochzuladen.

In diesem Beispiel wird die blob_info-Struktur geparst, um eine URL zu erstellen, die zum Initialisieren von BlobClient verwendet wird. Anschließend wird upload_blob aufgerufen, um die Datei in Blob Storage hochzuladen.

try:
    sas_url = "https://{}/{}/{}{}".format(
        blob_info["hostName"],
        blob_info["containerName"],
        blob_info["blobName"],
        blob_info["sasToken"]
    )

    print("\nUploading file: {} to Azure Storage as blob: {} in container {}\n".format(file_name, blob_info["blobName"], blob_info["containerName"]))

    # Upload the specified file
    with BlobClient.from_blob_url(sas_url) as blob_client:
        with open(file_name, "rb") as f:
            result = blob_client.upload_blob(f, overwrite=True)
            return (True, result)

except FileNotFoundError as ex:
    # catch file not found and add an HTTP status code to return in notification to IoT hub
    ex.status_code = 404
    return (False, ex)

except AzureError as ex:
    # catch Azure errors that might result from the upload operation
    return (False, ex)

Benachrichtigen des IoT-Hubs über den Uploadstatus

Verwenden Sie notify_blob_upload_status, um den IoT-Hub über den Status des Blob Storage-Vorgangs zu benachrichtigen. Übergeben Sie die von der get_storage_info_for_blob-Methode abgerufene Korrelations-ID (correlation_id). Mit correlation_id benachrichtigt der IoT-Hub Dienste, die möglicherweise auf eine Benachrichtigung über den Status der Dateiuploadaufgabe lauschen.

In diesem Beispiel wird der IoT-Hub über einen erfolgreichen Dateiupload benachrichtigt:

device_client.notify_blob_upload_status(storage_info["correlationId"], True, 200, "OK: {}".format(PATH_TO_FILE)

Herunterfahren des Geräteclients

Fahren Sie den Client herunter. Sobald diese Methode aufgerufen wird, führt jeder Versuch weiterer Clientaufrufe zur Auslösung von ClientError.

device_client.shutdown()

SDK-Dateiuploadbeispiele

Das SDK enthält zwei Dateiuploadbeispiele:

Übersicht

Diese Anleitung enthält zwei Abschnitte:

  • Hochladen einer Datei von einer Geräteanwendung
  • Empfangen einer Dateiuploadbenachrichtigung in einer Back-End-Anwendung

Hochladen einer Datei von einer Geräteanwendung

In diesem Abschnitt wird beschrieben, wie Sie mithilfe des Pakets azure-iot-device im Azure IoT SDK für Node.js eine Datei von einem Gerät in einen IoT-Hub hochladen.

Installieren der SDK-Pakete

Führen Sie den folgenden Befehl aus, um das Geräte-SDK azure-iot-device sowie die Pakete azure-iot-device-mqtt und @azure/storage-blob auf dem Entwicklungscomputer zu installieren:

npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save

Das Paket azure-iot-device enthält Objekte, die über eine Schnittstelle mit IoT-Geräten verfügen.

Gehen Sie wie folgt vor, um eine Datei von einem Gerät in einen IoT-Hub hochzuladen:

  1. Abrufen von Shared Access Signatures für das Blob
  2. Hochladen der Datei in Azure Storage
  3. Senden einer Benachrichtigung über den Dateiuploadstatus an den IoT-Hub

Erstellen von Modulen

Erstellen Sie Client-, Protokoll-, Fehler- und Pfadmodule mithilfe der installierten Pakete.

const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
const errors = require('azure-iot-common').errors;
const path = require('path');

Abrufen eines SAS-URI vom IoT-Hub

Verwenden Sie getBlobSharedAccessSignature, um das SAS-Token des verknüpften Speicherkontos vom IoT-Hub abzurufen. Wie in den Voraussetzungen beschrieben, ist der IoT-Hub mit Blob Storage verknüpft.

Zum Beispiel:

// make sure you set these environment variables prior to running the sample.
const localFilePath = process.env.PATH_TO_FILE;
const storageBlobName = path.basename(localFilePath);
const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
if (!blobInfo) {
throw new errors.ArgumentError('Invalid upload parameters');
}

Hochladen der Datei in den IoT-Hub

So laden Sie eine Datei von einem Gerät in den IoT-Hub hoch

  1. Erstellen Sie eine Streampipeline.
  2. Erstellen Sie die Blob-URL.
  3. Erstellen Sie ein BlockBlobClient-Objekt für den Dateiupload in Blob Storage.
  4. Rufen Sie uploadFile auf, um die Datei in Blob Storage hochzuladen.
  5. Rufen Sie notifyBlobUploadStatus auf, um den IoT-Hub zu benachrichtigen, dass der Upload erfolgreich oder nicht erfolgreich war.

Zum Beispiel:

// Open the pipeline
const pipeline = newPipeline(new AnonymousCredential(), {
retryOptions: { maxTries: 4 },
telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
keepAliveOptions: { enable: false }
});

// Construct the blob URL
const { hostName, containerName, blobName, sasToken } = blobInfo;
const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;

// Create the BlockBlobClient for file upload to Blob Storage
const blobClient = new BlockBlobClient(blobUrl, pipeline);

// Setup blank status notification arguments to be filled in on success/failure
let isSuccess;
let statusCode;
let statusDescription;

const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');

  try {
    const uploadStatus = await blobClient.uploadFile(localFilePath);
    console.log('uploadStreamToBlockBlob success');

    // Save successful status notification arguments
    isSuccess = true;
    statusCode = uploadStatus._response.status;
    statusDescription = uploadStatus._response.bodyAsText;

    // Notify IoT hub of upload to blob status (success)
    console.log('notifyBlobUploadStatus success');
  }
  catch (err) {
    isSuccess = false;
    statusCode = err.code;
    statusDescription = err.message;

    console.log('notifyBlobUploadStatus failed');
    console.log(err);
  }

// Send file upload status notification to IoT hub
await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);

Empfangen einer Dateiuploadbenachrichtigung in einer Back-End-Anwendung

Sie können eine Back-End-Anwendung erstellen, um den Dienstclient für den IoT-Hub auf Benachrichtigungen zum Gerätedateiupload zu überprüfen.

So erstellen Sie eine Anwendung für Dateiuploadbenachrichtigungen

  1. Herstellen einer Verbindung mit dem Dienstclient für den IoT-Hub
  2. Überprüfen auf eine Benachrichtigung zum Dateiupload

Herstellen einer Verbindung mit dem Dienstclient für den IoT-Hub

Die ServiceClient-Klasse enthält Methoden, mit denen Dienste Dateiuploadbenachrichtigungen empfangen können.

Stellen Sie mithilfe von fromConnectionString eine Verbindung mit dem IoT-Hub her. Übergeben Sie die primäre Verbindungszeichenfolge für den IoT-Hub.

const Client = require('azure-iothub').Client;
const connectionString = "{IoT hub primary connection string}";
const serviceClient = Client.fromConnectionString(connectionString);

Stellen Sie über open eine Verbindung mit dem IoT-Hub her.

//Open the connection to IoT hub
serviceClient.open(function (err) {
  if (err) {
    console.error('Could not connect: ' + err.message);
  } else {
    console.log('Service client connected');

Überprüfen auf eine Benachrichtigung zum Dateiupload

So überprüfen Sie auf Dateiuploadbenachrichtigungen

  1. Rufen Sie getFileNotificationReceiver auf. Geben Sie den Namen einer Rückrufmethode für den Dateiupload an, die aufgerufen wird, wenn Benachrichtigungen empfangen werden.
  2. Verarbeiten Sie Dateiuploadbenachrichtigungen in der Rückrufmethode.

In diesem Beispiel wird der Empfänger receiveFileUploadNotification für den Benachrichtigungsrückruf eingerichtet. Der Empfänger interpretiert die Informationen zum Dateiuploadstatus und gibt eine Statusmeldung in der Konsole aus.

//Set up the receiveFileUploadNotification notification message callback receiver
serviceClient.getFileNotificationReceiver(function receiveFileUploadNotification(err, receiver){
if (err) {
  console.error('error getting the file notification receiver: ' + err.toString());
} else {
  receiver.on('message', function (msg) {
    console.log('File upload from device:')
    console.log(msg.getData().toString('utf-8'));
    receiver.complete(msg, function (err) {
      if (err) {
        console.error('Could not finish the upload: ' + err.message);
      } else {
        console.log('Upload complete');
      }
    });
  });
}

SDK-Dateiuploadbeispiel

Das SDK enthält ein Beispiel für den erweiterten Upload in Blobs.