Udostępnij za pośrednictwem


Przekazywanie plików z urządzenia do chmury za pomocą usługi Azure IoT Hub

W tym artykule pokazano, jak:

  • Użyj możliwości przekazywania plików usługi IoT Hub, aby przekazać plik do usługi Azure Blob Storage przy użyciu zestawów SDK urządzeń i usług Azure IoT.
  • Powiadom usługę IoT Hub o pomyślnym przekazaniu pliku i utworzeniu usługi zaplecza w celu odbierania powiadomień o przekazaniu plików z usługi IoT Hub przy użyciu zestawów SDK usługi Azure IoT.

W niektórych scenariuszach nie można łatwo mapować danych wysyłanych przez urządzenia do stosunkowo małych komunikatów z urządzenia do chmury akceptowanych przez usługę IoT Hub. Możliwości przekazywania plików w usłudze IoT Hub umożliwiają przenoszenie dużych lub złożonych danych do chmury. Na przykład:

  • Filmy wideo
  • Duże pliki zawierające obrazy
  • Próbkowane dane drgań o wysokiej częstotliwości
  • Niektóre formy wstępnie przetworzonych danych

Te pliki są zwykle przetwarzane wsadowo w chmurze przy użyciu narzędzi, takich jak usługa Azure Data Factory lub stos usługi Hadoop . Jeśli musisz przekazać pliki z urządzenia, nadal możesz korzystać z zabezpieczeń i niezawodności usługi IoT Hub. W tym artykule pokazano, jak to zrobić.

Ten artykuł ma na celu uzupełnienie przykładów zestawu SDK z możliwością uruchamiania, do których odwołuje się ten artykuł.

Aby uzyskać więcej informacji, zobacz:

Ważne

Funkcje przekazywania plików na urządzeniach korzystających z uwierzytelniania urzędu certyfikacji X.509 są w publicznej wersji zapoznawczej, a tryb podglądu musi być włączony. Jest ona ogólnie dostępna na urządzeniach korzystających z uwierzytelniania odcisku palca X.509 lub zaświadczania certyfikatu X.509 za pomocą usługi Azure Device Provisioning Service. Aby dowiedzieć się więcej na temat uwierzytelniania X.509 w usłudze IoT Hub, zobacz Obsługiwane certyfikaty X.509.

Wymagania wstępne

  • Centrum IoT. Niektóre wywołania zestawu SDK wymagają parametry połączenia podstawowej usługi IoT Hub, dlatego zanotuj parametry połączenia.

  • Zarejestrowane urządzenie. Niektóre wywołania zestawu SDK wymagają parametry połączenia podstawowego urządzenia, dlatego zanotuj parametry połączenia.

  • Uprawnienie IoT Hub Service Connect — aby otrzymywać komunikaty powiadomień o przekazaniu plików, usługa zaplecza musi mieć uprawnienie Service Connect . Domyślnie każde centrum IoT Hub jest tworzone przy użyciu zasad dostępu współdzielonego o nazwie usługa , która przyznaje to uprawnienie. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z centrum IoT Hub.

  • Skonfiguruj przekazywanie plików w centrum IoT, łącząc konto usługi Azure Storage i kontener usługi Azure Blob Storage. Można je skonfigurować przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

Omówienie

Ten instrukcje zawiera dwie sekcje:

  • Przekazywanie pliku z aplikacji urządzenia
  • Odbieranie powiadomienia o przekazaniu pliku w aplikacji zaplecza

Przekazywanie pliku z aplikacji urządzenia

W tej sekcji opisano sposób przekazywania pliku z urządzenia do centrum IoT przy użyciu klasy DeviceClient w zestawie SDK usługi Azure IoT dla platformy .NET.

Wykonaj tę procedurę, aby przekazać plik z urządzenia do centrum IoT:

  1. Nawiązywanie połączenia z centrum IoT
  2. Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub
  3. Przekazywanie pliku do usługi Azure Storage
  4. Powiadamianie centrum IoT o stanie przekazywania pliku

Nawiązywanie połączenia z urządzeniem

Wywołaj metodę CreateFromConnectionString , aby nawiązać połączenie z urządzeniem. Przekaż podstawowe parametry połączenia urządzenia.

AMQP jest domyślnym protokołem transportu.

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

Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub

Wywołaj metodę GetFileUploadSasUriAsync , aby uzyskać szczegóły przekazywania pliku. Identyfikator URI sygnatury dostępu współdzielonego jest używany w następnym kroku do przekazywania pliku z urządzenia do usługi Blob Storage.

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();

Przekazywanie pliku do usługi Azure Storage

Aby przekazać plik do usługi Azure Storage:

  1. Utwórz obiekt blockBlobClient, przekazując identyfikator URI przekazywania pliku.

  2. Użyj metody UploadAsync, aby przekazać plik do usługi Blob Storage, przekazując identyfikator URI sygnatury dostępu współdzielonego. Opcjonalnie możesz dodać opcje przekazywania obiektów blob i parametry tokenu anulowania.

Klient usługi Azure Blob zawsze używa protokołu HTTPS do przekazania pliku do usługi Azure Storage.

W tym przykładzie przekazano identyfikator URI sygnatury dostępu współdzielonego w BlockBlobClient celu utworzenia klienta blokowego obiektu blob usługi Azure Storage i przekazania pliku:

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

Powiadamianie centrum IoT o stanie przekazywania pliku

Użyj metody CompleteFileUploadAsync , aby powiadomić centrum IoT Hub o zakończeniu przekazywania przez klienta urządzenia, przekazując obiekt FileUploadCompletionNotification . Flaga IsSuccess wskazuje, czy przekazywanie zakończyło się pomyślnie. Po powiadomieniu centrum IoT będzie zwalniać zasoby skojarzone z przekazywaniem (identyfikator URI sygnatury dostępu współdzielonego).

Jeśli powiadomienia o przekazaniu plików są włączone, usługa IoT Hub wysyła komunikat powiadomienia o przekazaniu pliku do usług zaplecza skonfigurowanych na potrzeby powiadamiania o przekazaniu plików.

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);

Przykład przekazywania pliku zestawu SDK

Zestaw SDK zawiera ten przykład przekazywania plików.

Odbieranie powiadomienia o przekazaniu pliku w aplikacji zaplecza

Możesz utworzyć usługę zaplecza, aby odbierać komunikaty powiadomień o przekazaniu plików z centrum IoT Hub.

Klasa ServiceClient zawiera metody, których usługi mogą używać do odbierania powiadomień o przekazaniu plików.

Aby otrzymać powiadomienie o przekazaniu pliku:

  1. Wywołaj metodę CreateFromConnectionString , aby nawiązać połączenie z centrum IoT. Przekaż podstawowe parametry połączenia centrum IoT Hub.
  2. Utwórz element CancellationToken.
  3. Wywołaj metodę GetFileNotificationReceiver , aby utworzyć odbiornik powiadomień.
  4. Użyj pętli z funkcją ReceiveAsync , aby poczekać na powiadomienie o przekazaniu pliku.

Na przykład:

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);
}

Omówienie

Ten instrukcje zawiera dwie sekcje:

  • Przekazywanie pliku z aplikacji urządzenia
  • Odbieranie powiadomienia o przekazaniu pliku w aplikacji zaplecza

Przekazywanie pliku z aplikacji urządzenia

W tej sekcji opisano sposób przekazywania pliku z urządzenia do centrum IoT przy użyciu klasy DeviceClient z zestawu SDK usługi Azure IoT dla języka Java.

Wykonaj tę procedurę, aby przekazać plik z urządzenia do centrum IoT:

  1. Nawiązywanie połączenia z urządzeniem
  2. Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub
  3. Przekazywanie pliku do usługi Azure Storage
  4. Wysyłanie powiadomienia o stanie przekazywania pliku do centrum IoT Hub

Protokół połączenia

Operacje przekazywania plików zawsze używają protokołu HTTPS, ale element DeviceClient może definiować element IotHubClientProtocol dla innych usług, takich jak telemetria, metoda urządzenia i bliźniacze reprezentacje urządzenia.

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

Nawiązywanie połączenia z urządzeniem

DeviceClient Utwórz wystąpienie elementu , aby nawiązać połączenie z urządzeniem przy użyciu podstawowego parametry połączenia urządzenia.

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

Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub

Wywołaj metodę getFileUploadSasUri, aby uzyskać obiekt FileUploadSasUriResponse.

FileUploadSasUriResponse zawiera te metody i wartości zwracane. Wartości zwracane można przekazać do metod przekazywania plików.

Method Wartość zwracana
getCorrelationId() Identyfikator korelacji
getContainerName() Nazwa kontenera
getBlobName() Nazwa obiektu blob
getBlobUri() Blob URI

Na przykład:

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());

Przekazywanie pliku do usługi Azure Storage

Przekaż punkt końcowy identyfikatora URI obiektu blob do obiektu BlobClientBuilder.buildclient , aby utworzyć obiekt BlobClient .

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

Wywołaj metodę uploadFromFile , aby przekazać plik do usługi Blob Storage.

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

Wysyłanie powiadomienia o stanie przekazywania pliku do centrum IoT Hub

Wyślij powiadomienie o stanie przekazywania do centrum IoT Po próbie przekazania pliku.

Utwórz obiekt FileUploadCompletionNotification. Przekaż stan powodzenia correlationId przekazywania plików i isSuccess . isSuccess true Przekaż wartość, gdy przekazywanie pliku zakończyło się pomyślnie, false jeśli nie.

FileUploadCompletionNotification musi być wywoływana nawet wtedy, gdy przekazywanie pliku zakończy się niepowodzeniem. Usługa IoT Hub ma stałą liczbę identyfikatorów URI sygnatur dostępu współdzielonego, która może być aktywna w danym momencie. Po zakończeniu przekazywania pliku należy zwolnić identyfikator URI sygnatury dostępu współdzielonego, aby można było wygenerować inny identyfikator URI sygnatury dostępu współdzielonego. Jeśli identyfikator URI sygnatury dostępu współdzielonego nie jest zwalniany za pośrednictwem tego interfejsu API, zwalnia się w końcu na podstawie tego, jak długo identyfikatory URI sygnatur dostępu współdzielonego są skonfigurowane do działania w centrum IoT.

Ten przykład przekazuje stan powodzenia.

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

Zamykanie klienta

Zwolnij client zasoby.

client.closeNow();

Odbieranie powiadomienia o przekazaniu pliku w aplikacji zaplecza

Możesz utworzyć aplikację zaplecza, aby otrzymywać powiadomienia o przekazaniu plików.

Aby utworzyć aplikację powiadamiania o przekazaniu pliku:

  1. Nawiązywanie połączenia z klientem usługi IoT Hub
  2. Sprawdzanie powiadomienia o przekazaniu pliku

Klasa ServiceClient zawiera metody, których usługi mogą używać do odbierania powiadomień o przekazaniu plików.

Nawiązywanie połączenia z klientem usługi IoT Hub

Utwórz IotHubServiceClientProtocol obiekt. Połączenie używa AMQPS protokołu.

Wywołaj metodę createFromConnectionString , aby nawiązać połączenie z centrum IoT. Przekaż podstawowe parametry połączenia centrum 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);

Sprawdzanie stanu przekazywania pliku

Aby sprawdzić stan przekazywania pliku:

  1. Utwórz obiekt getFileUploadNotificationReceiver.
  2. Użyj polecenia open , aby nawiązać połączenie z centrum IoT Hub.
  3. Wywołaj metodę odbierania , aby sprawdzić stan przekazywania pliku. Ta metoda zwraca obiekt fileUploadNotification . Jeśli otrzymasz powiadomienie o przekazaniu, możesz wyświetlić pola stanu przekazywania przy użyciu metod fileUploadNotification .

Na przykład:

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();

Przykłady przekazywania plików zestawu SDK

Istnieją dwa przykłady przekazywania plików Java.

Instalowanie pakietów

Przed wywołaniem dowolnego powiązanego kodu należy zainstalować bibliotekę azure-iot-device.

pip install azure-iot-device

Pakiet azure.storage.blob służy do przekazywania pliku.

pip install azure.storage.blob

Przekazywanie pliku z aplikacji urządzenia

W tej sekcji opisano sposób przekazywania pliku z urządzenia do centrum IoT przy użyciu klasy IoTHubDeviceClient z zestawu SDK usługi Azure IoT dla języka Python.

Wykonaj tę procedurę, aby przekazać plik z urządzenia do centrum IoT:

  1. Nawiązywanie połączenia z urządzeniem
  2. Uzyskiwanie informacji o usłudze Blob Storage
  3. Przekazywanie pliku do usługi Blob Storage
  4. Powiadamianie centrum IoT o stanie przekazywania

Importowanie bibliotek

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

Nawiązywanie połączenia z urządzeniem

Aby nawiązać połączenie z urządzeniem:

  1. Wywołaj create_from_connection_string, aby dodać parametry połączenia podstawowego urządzenia.

  2. Wywołaj połączenie , aby nawiązać połączenie z klientem urządzenia.

Na przykład:

# 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()

Uzyskiwanie informacji o usłudze Blob Storage

Wywołaj get_storage_info_for_blob , aby uzyskać informacje z centrum IoT Hub o połączonym koncie usługi Azure Storage. Te informacje obejmują nazwę hosta, nazwę kontenera, nazwę obiektu blob i token SAS. Metoda get_storage_info_for_blob zwraca również metodę correlation_id, która jest używana w metodzie notify_blob_upload_status . Jest correlation_id to sposób oznaczania obiektów blob, nad którymi pracujesz.

# 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)

Przekazywanie pliku do usługi Blob Storage

Aby przekazać plik do usługi Blob Storage:

  1. Użyj from_blob_url , aby utworzyć obiekt BlobClient na podstawie adresu URL obiektu blob.
  2. Wywołaj upload_blob , aby przekazać plik do usługi Blob Storage.

Ten przykład analizuje blob_info strukturę w celu utworzenia adresu URL używanego do zainicjowania obiektu BlobClient. Następnie wywołuje metodę upload_blob przekazywania pliku do usługi Blob Storage.

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)

Powiadamianie centrum IoT o stanie przekazywania

Użyj notify_blob_upload_status , aby powiadomić centrum IoT o stanie operacji usługi Blob Storage. Przekaż metodę uzyskaną correlation_id przez metodę get_storage_info_for_blob . Element correlation_id jest używany przez centrum IoT do powiadamiania dowolnej usługi, która może nasłuchiwać powiadomienia dotyczące stanu zadania przekazywania plików.

Ten przykład powiadamia centrum IoT o pomyślnym przekazaniu pliku:

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

Zamykanie klienta urządzenia

Zamknij klienta. Po wywołaniu tej metody każda próba dalszego wywołania klienta spowoduje wywołanie błędu ClientError .

device_client.shutdown()

Przykłady przekazywania plików zestawu SDK

Zestaw SDK zawiera dwa przykłady przekazywania plików:

Omówienie

Ten instrukcje zawiera dwie sekcje:

  • Przekazywanie pliku z aplikacji urządzenia
  • Odbieranie powiadomienia o przekazaniu pliku w aplikacji zaplecza

Przekazywanie pliku z aplikacji urządzenia

W tej sekcji opisano sposób przekazywania pliku z urządzenia do centrum IoT przy użyciu pakietu azure-iot-device w zestawie SDK usługi Azure IoT dla Node.js.

Instalowanie pakietów zestawu SDK

Uruchom to polecenie, aby zainstalować zestaw SDK urządzenia azure-iot-device , azure-iot-device-mqtt oraz pakiety @azure/storage-blob na maszynie dewelopera:

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

Pakiet azure-iot-device zawiera obiekty interfejsu z urządzeniami IoT.

Postępuj zgodnie z tą procedurą przekazywania pliku z urządzenia do centrum IoT:

  1. Uzyskiwanie sygnatur dostępu współdzielonego obiektu blob
  2. Przekazywanie pliku do usługi Azure Storage
  3. Wysyłanie powiadomienia o stanie przekazywania pliku do centrum IoT Hub

Tworzenie modułów

Utwórz moduły klient, protokół, błędy i ścieżki przy użyciu zainstalowanych pakietów.

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');

Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub

Użyj polecenia getBlobSharedAccessSignature , aby uzyskać połączony token SAS konta magazynu z centrum IoT. Zgodnie z opisem w wymaganiach wstępnych centrum IoT jest połączone z usługą Blob Storage.

Na przykład:

// 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');
}

Przekazywanie pliku do centrum IoT

Aby przekazać plik z urządzenia do usługi IoT Hub:

  1. Tworzenie potoku strumienia
  2. Konstruowanie adresu URL obiektu blob
  3. Tworzenie obiektu BlockBlobClient na potrzeby przekazywania plików do usługi Blob Storage
  4. Wywołaj metodę uploadFile , aby przekazać plik do usługi Blob Storage
  5. Wywołaj metodę notifyBlobUploadStatus , aby powiadomić centrum IoT o pomyślnym lub nieudanym przekazaniu

Na przykład:

// 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);

Odbieranie powiadomienia o przekazaniu pliku w aplikacji zaplecza

Aplikację zaplecza można utworzyć, aby sprawdzić klienta usługi IoT Hub pod kątem powiadomień dotyczących przekazywania plików urządzenia.

Aby utworzyć aplikację powiadamiania o przekazaniu pliku:

  1. Nawiązywanie połączenia z klientem usługi IoT Hub
  2. Sprawdzanie powiadomienia o przekazaniu pliku

Nawiązywanie połączenia z klientem usługi IoT Hub

Klasa ServiceClient zawiera metody, których usługi mogą używać do odbierania powiadomień o przekazaniu plików.

Połącz się z centrum IoT przy użyciu polecenia fromConnectionString. Przekaż podstawowe parametry połączenia centrum IoT Hub.

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

Otwórz połączenie z centrum IoT Hub.

//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');

Sprawdzanie powiadomienia o przekazaniu pliku

Aby sprawdzić powiadomienia dotyczące przekazywania plików:

  1. Wywołaj metodę getFileNotificationReceiver. Podaj nazwę metody przekazywania pliku wywołania zwrotnego, która jest wywoływana po odebraniu komunikatów powiadomień.
  2. Przetwarzanie powiadomień przekazywania plików w metodzie wywołania zwrotnego.

W tym przykładzie skonfigurowaliśmy odbiornik wywołania zwrotnego receiveFileUploadNotification powiadomień. Odbiorca interpretuje informacje o stanie przekazywania pliku i wyświetla komunikat o stanie do konsoli programu .

//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');
      }
    });
  });
}

Przykład przekazywania pliku zestawu SDK

Zestaw SDK zawiera zaawansowany przykład przekazywania do obiektów blob.