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:
- Omówienie przekazywania plików za pomocą usługi IoT Hub
- Wprowadzenie do usługi Azure Blob Storage
- Zestawy SDK usługi Azure IoT
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:
- Nawiązywanie połączenia z centrum IoT
- Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub
- Przekazywanie pliku do usługi Azure Storage
- 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:
Utwórz obiekt blockBlobClient, przekazując identyfikator URI przekazywania pliku.
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:
- Wywołaj metodę CreateFromConnectionString , aby nawiązać połączenie z centrum IoT. Przekaż podstawowe parametry połączenia centrum IoT Hub.
- Utwórz element CancellationToken.
- Wywołaj metodę GetFileNotificationReceiver , aby utworzyć odbiornik powiadomień.
- 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:
- Nawiązywanie połączenia z urządzeniem
- Uzyskiwanie identyfikatora URI sygnatury dostępu współdzielonego z centrum IoT Hub
- Przekazywanie pliku do usługi Azure Storage
- 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:
- Nawiązywanie połączenia z klientem usługi IoT Hub
- 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:
- Utwórz obiekt getFileUploadNotificationReceiver.
- Użyj polecenia open , aby nawiązać połączenie z centrum IoT Hub.
- 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:
- Nawiązywanie połączenia z urządzeniem
- Uzyskiwanie informacji o usłudze Blob Storage
- Przekazywanie pliku do usługi Blob Storage
- 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:
Wywołaj create_from_connection_string, aby dodać parametry połączenia podstawowego urządzenia.
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:
- Użyj from_blob_url , aby utworzyć obiekt BlobClient na podstawie adresu URL obiektu blob.
- 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:
- Uzyskiwanie sygnatur dostępu współdzielonego obiektu blob
- Przekazywanie pliku do usługi Azure Storage
- 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:
- Tworzenie potoku strumienia
- Konstruowanie adresu URL obiektu blob
- Tworzenie obiektu BlockBlobClient na potrzeby przekazywania plików do usługi Blob Storage
- Wywołaj metodę uploadFile , aby przekazać plik do usługi Blob Storage
- 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:
- Nawiązywanie połączenia z klientem usługi IoT Hub
- 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:
- Wywołaj metodę getFileNotificationReceiver. Podaj nazwę metody przekazywania pliku wywołania zwrotnego, która jest wywoływana po odebraniu komunikatów powiadomień.
- 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.