Bestanden uploaden van uw apparaat naar de cloud met Azure IoT Hub (.NET)

In dit artikel wordt beschreven hoe u mogelijkheden voor het uploaden van bestanden van IoT Hub een bestand uploadt naar Azure Blob Storage met behulp van een Azure IoT .NET-apparaat en service-SDK's.

De quickstart over het verzenden van telemetrie van een apparaat naar een IoT Hub en cloud-naar-apparaat-berichten verzenden met IoT Hub toont de basisfunctionaliteit voor apparaat-naar-cloud- en cloud-naar-apparaatberichten van IoT Hub. In het artikel Berichtroutering configureren met IoT Hub ziet u een manier om apparaat-naar-cloud-berichten betrouwbaar op te slaan in Microsoft Azure Blob Storage. In sommige scenario's kunt u echter niet eenvoudig de gegevens toewijzen die uw apparaten verzenden naar de relatief kleine apparaat-naar-cloud-berichten die IoT Hub accepteert. Voorbeeld:

  • Video's
  • Grote bestanden die afbeeldingen bevatten
  • Voorbeeld van trillingsgegevens met hoge frequentie
  • Een vorm van vooraf verwerkte gegevens

Deze bestanden worden doorgaans in batches verwerkt in de cloud, met behulp van hulpprogramma's zoals Azure Data Factory of de Hadoop-stack . Wanneer u bestanden van een apparaat wilt uploaden, kunt u nog steeds de beveiliging en betrouwbaarheid van IoT Hub gebruiken. In dit artikel wordt uitgelegd hoe u dit doet.

Aan het einde van dit artikel voert u twee .NET-console-apps uit:

  • FileUploadSample. Deze apparaat-app uploadt een bestand naar opslag met behulp van een SAS-URI die wordt geleverd door uw IoT-hub. Dit voorbeeld is afkomstig uit de Azure IoT C# SDK-opslagplaats die u downloadt in de vereisten.

  • ReadFileUploadNotification. Deze service-app ontvangt meldingen voor het uploaden van bestanden van uw IoT-hub. U maakt deze app.

Notitie

IoT Hub ondersteunt veel apparaatplatformen en -talen (waaronder C, Java, Python en JavaScript) via Azure IoT-apparaat-SDK's. Raadpleeg het Azure IoT Developer Center voor meer informatie over het verbinden van uw apparaat met Azure IoT Hub.

Belangrijk

De functionaliteit voor het uploaden van bestanden op apparaten die X.509-verificatie (CA) gebruiken, is in openbare preview en de preview-modus moet zijn ingeschakeld. Het is algemeen beschikbaar op apparaten die gebruikmaken van X.509-vingerafdrukverificatie of X.509-certificaatattestation met Azure Device Provisioning Service. Zie Ondersteunde X.509-certificaten voor meer informatie over X.509-verificatie met IoT Hub.

Vereisten

  • Een IoT-hub. Maak er een met de CLI of Azure Portal.

  • Een geregistreerd apparaat. Registreer er een in Azure Portal.

  • De voorbeeldtoepassingen die u in dit artikel uitvoert, worden geschreven met C# met .NET Core.

    Download de .NET Core SDK voor meerdere platforms downloaden van .NET.

    Controleer de huidige versie van de .NET Core SDK op uw ontwikkelcomputer met behulp van de volgende opdracht:

    dotnet --version
    
  • Download de Azure IoT C#-SDK uit het downloadvoorbeeld en pak het ZIP-archief uit.

  • Poort 8883 moet zijn geopend in uw firewall. Het voorbeeld in dit artikel maakt gebruik van het MQTT-protocol, dat via poort 8883 communiceert. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.

Een Azure Storage-account koppelen aan IoT Hub

Als u bestanden vanaf een apparaat wilt uploaden, moet u een Azure Storage-account en een Azure Blob Storage-container hebben die is gekoppeld aan uw IoT-hub. Zodra u het opslagaccount en de container aan uw IoT-hub hebt gekoppeld, kan uw IoT-hub de elementen van een SAS-URI opgeven wanneer dit door een apparaat wordt aangevraagd. Het apparaat kan deze elementen vervolgens gebruiken om de SAS-URI te maken die wordt gebruikt om te verifiëren met Azure Storage en bestanden te uploaden naar de blobcontainer.

Een Azure Storage-account koppelen aan uw IoT-hub:

  1. Selecteer onder Hub-instellingen het uploaden van bestanden in het linkerdeelvenster van uw IoT-hub.

    Schermopname met de instellingen voor het uploaden van bestanden in de portal.

  2. Selecteer Azure Storage-container in het deelvenster Bestand uploaden. Voor dit artikel wordt aanbevolen dat uw opslagaccount en IoT Hub zich in dezelfde regio bevinden.

    • Als u al een opslagaccount hebt dat u wilt gebruiken, selecteert u dit in de lijst.

    • Als u een nieuw opslagaccount wilt maken, selecteert u +Storage-account. Geef een naam op voor het opslagaccount en zorg ervoor dat de locatie is ingesteld op dezelfde regio als uw IoT-hub en selecteer VERVOLGENS OK. Het nieuwe account wordt gemaakt in dezelfde resourcegroep als uw IoT-hub. Wanneer de implementatie is voltooid, selecteert u het opslagaccount in de lijst.

    Nadat u het opslagaccount hebt geselecteerd, wordt het deelvenster Containers geopend.

  3. Selecteer in het deelvenster Containers de blobcontainer.

    • Als u al een blobcontainer hebt die u wilt gebruiken, selecteert u deze in de lijst en klikt u op Selecteren.

    • Als u een nieuwe blobcontainer wilt maken, selecteert u + Container. Geef een naam op voor de nieuwe container. Voor de doeleinden van dit artikel kunt u alle andere velden op hun standaardwaarde laten staan. Selecteer Maken. Wanneer de implementatie is voltooid, selecteert u de container in de lijst en klikt u op Selecteren.

  4. Controleer of bestandsmeldingen zijn ingesteld op Aan in het deelvenster Bestand uploaden. U kunt alle andere instellingen op de standaardinstellingen laten staan. Selecteer Opslaan en wacht totdat de instellingen zijn voltooid voordat u verdergaat met de volgende sectie.

    Schermopname met instellingen voor het uploaden van bestanden bevestigen in de portal.

Zie Een opslagaccount maken voor gedetailleerdere instructies voor het maken van een Azure Storage-account. Zie Bestandsuploads configureren met behulp van Azure Portal voor gedetailleerde instructies over het koppelen van een opslagaccount en blobcontainer aan een IoT-hub.

Bestand uploaden vanuit een apparaat-app

In dit artikel gebruikt u een voorbeeld uit de Azure IoT C# SDK-opslagplaats die u eerder hebt gedownload als de apparaat-app. U kunt de onderstaande bestanden openen met Visual Studio, Visual Studio Code of een teksteditor van uw keuze.

Het voorbeeld bevindt zich in azure-iot-sdk-csharp/iothub/device/samples/getting started/FileUploadSample in de map waar u de Azure IoT C#-SDK hebt uitgepakt.

Bekijk de code in FileUpLoadSample.cs. Dit bestand bevat de belangrijkste voorbeeldlogica. Nadat u een IoT Hub-apparaatclient hebt gemaakt, volgt deze de standaard driedelige procedure voor het uploaden van bestanden vanaf een apparaat:

  1. Met de code wordt de methode GetFileUploadSasUriAsync op de apparaatclient aangeroepen om een SAS-URI op te halen uit de IoT-hub:

    var fileUploadSasUriRequest = new FileUploadSasUriRequest
    {
        BlobName = fileName
    };
    
    // Lines removed for clarity
    
    FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest);
    Uri uploadUri = sasUri.GetBlobUri();
    
  2. De code gebruikt de SAS-URI om het bestand te uploaden naar Azure Storage. In dit voorbeeld wordt de SAS-URI gebruikt om een Azure Storage-blok-blobclient te maken en het bestand te uploaden:

    var blockBlobClient = new BlockBlobClient(uploadUri);
    await blockBlobClient.UploadAsync(fileStreamSource, new BlobUploadOptions());
    
  3. De code meldt de IoT-hub dat het uploaden is voltooid. Dit vertelt de IoT-hub dat deze resources kan vrijgeven die zijn gekoppeld aan het uploaden (de SAS-URI). Als meldingen voor het uploaden van bestanden zijn ingeschakeld, verzendt de IoT-hub een meldingsbericht naar back-endservices.

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

Als u het parameter.cs-bestand bekijkt, ziet u dat:

  • Voor het voorbeeld moet u een parameter doorgeven, p, die een apparaat verbindingsreeks.

  • Het apparaatvoorbeeld maakt standaard gebruik van het MQTT-protocol om te communiceren met IoT Hub. U kunt de parameter t gebruiken om dit transportprotocol te wijzigen. Ongeacht deze selectie gebruikt de Azure Blob-client altijd HTTPS als protocol om de Azure-opslag van het bestand te uploaden.

De IoT Hub-verbindingsreeks ophalen

In dit artikel maakt u een back-endservice voor het ontvangen van meldingen over het uploaden van bestanden van uw IoT-hub. Voor het ontvangen van meldingsberichten voor het uploaden van bestanden heeft uw service de machtiging voor serviceverbinding nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent.

Voer de volgende stappen uit om de IoT Hub-verbindingsreeks voor het servicebeleid op te halen:

  1. Selecteer resourcegroepen in de Azure-portal. Selecteer de resourcegroep waar uw hub zich bevindt en selecteer vervolgens uw hub in de lijst met resources.

  2. Selecteer in het linkerdeelvenster van uw IoT-hub beleid voor gedeelde toegang.

  3. Selecteer het servicebeleid in de lijst met beleidsregels.

  4. Kopieer de primaire verbindingsreeks en sla de waarde op.

Schermopname die laat zien hoe u de verbindingsreeks ophaalt uit uw IoT Hub in Azure Portal.

Zie Toegangsbeheer en machtigingen voor meer informatie over beleid en machtigingen voor gedeelde toegang van IoT Hub.

Een melding voor het uploaden van bestanden ontvangen

In deze sectie maakt u een C#-console-app die meldingsberichten over het uploaden van bestanden ontvangt van uw IoT-hub.

  1. Open een opdrachtvenster en ga naar de map waarin u het project wilt maken. Maak een map met de naam ReadFileUploadNotifications en wijzig mappen in die map.

    mkdir ReadFileUploadNotification
    cd ReadFileUploadNotification
    
  2. Voer de volgende opdracht uit om een C#-consoleproject te maken. Nadat de opdracht is uitgevoerd, bevat de map een Program.cs-bestand en een ReadFileUploadNotification.csproj-bestand .

    dotnet new console --language c#
    
  3. Voer de volgende opdracht uit om het pakket Microsoft.Azure.Devices toe te voegen aan het projectbestand. Dit pakket is de Azure IoT .NET-service-SDK.

    dotnet add package Microsoft.Azure.Devices
    
  4. Open het bestand Program.cs en voeg de volgende instructie toe boven aan het bestand:

    using Microsoft.Azure.Devices;
    
  5. Voeg de volgende velden toe aan de klasse Program: Vervang de {iot hub connection string} tijdelijke aanduidingswaarde door de IoT-hub verbindingsreeks die u eerder hebt gekopieerd in De IoT-hub ophalen verbindingsreeks:

    static ServiceClient serviceClient;
    static string connectionString = "{iot hub connection string}";
    
  6. Voeg de volgende methode toe aan de klasse Program:

    private async static void ReceiveFileUploadNotificationAsync()
    {
        var notificationReceiver = serviceClient.GetFileNotificationReceiver();
        Console.WriteLine("\nReceiving file upload notification from service");
        while (true)
        {
            var fileUploadNotification = await notificationReceiver.ReceiveAsync();
            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);
        }
    }
    

    Houd er rekening mee dat dit ontvangstpatroon hetzelfde is als voor het ontvangen van cloud-naar-apparaat-berichten van de apparaat-app.

  7. Vervang ten slotte de regels in de main-methode door het volgende:

    Console.WriteLine("Receive file upload notifications\n");
    serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
    ReceiveFileUploadNotificationAsync();
    Console.WriteLine("Press Enter to exit\n");
    Console.ReadLine();
    

De toepassingen uitvoeren

U bent nu klaar om de toepassingen uit te voeren.

  1. Voer eerst de service-app uit om meldingen over het uploaden van bestanden van de IoT-hub te ontvangen. Voer bij de opdrachtprompt in de map ReadFileUploadNotification de volgende opdrachten uit:

    dotnet restore
    dotnet run
    

    De app wordt gestart en wacht op een melding voor het uploaden van bestanden vanuit uw IoT-hub:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
  2. Voer vervolgens de apparaat-app uit om het bestand te uploaden naar Azure Storage. Open een nieuwe opdrachtprompt en wijzig mappen in de azure-iot-sdk-csharp\iothub\device\samples\getting started\FileUploadSample onder de map waarin u de Azure IoT C#-SDK hebt uitgebreid. Voer de volgende opdrachten uit. Vervang de waarde van de {Your device connection string} tijdelijke aanduiding in de tweede opdracht door het apparaat verbindingsreeks u hebt gezien toen u een apparaat in de IoT-hub registreerde.

    dotnet restore
    dotnet run --p "{Your device connection string}"
    

    De volgende uitvoer is afkomstig van de apparaat-app nadat het uploaden is voltooid:

      Uploading file TestPayload.txt
      Getting SAS URI from IoT Hub to use when uploading the file...
      Successfully got SAS URI (https://contosostorage.blob.core.windows.net/contosocontainer/MyDevice%2FTestPayload.txt?sv=2018-03-28&sr=b&sig=x0G1Baf%2BAjR%2BTg3nW34zDNKs07p6dLzkxvZ3ZSmjIhw%3D&se=2021-05-04T16%3A40%3A52Z&sp=rw) from IoT Hub
      Uploading file TestPayload.txt using the Azure Storage SDK and the retrieved SAS URI for authentication
      Successfully uploaded the file to Azure Storage
      Notified IoT Hub that the file upload succeeded and that the SAS URI can be freed.
      Time to upload file: 00:00:01.5077954.
      Done.
    
  3. U ziet dat de service-app laat zien dat deze de melding voor het uploaden van bestanden heeft ontvangen:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
    Received file upload notification: myDeviceId/TestPayload.txt
    

Het uploaden van bestanden controleren

U kunt de portal gebruiken om het geüploade bestand weer te geven in de opslagcontainer die u hebt geconfigureerd:

  1. Navigeer naar uw opslagaccount in Azure Portal.

  2. Selecteer Containers in het linkerdeelvenster van uw opslagaccount.

  3. Selecteer de container waarnaar u het bestand hebt geüpload.

  4. Selecteer de map met de naam van uw apparaat.

  5. Selecteer de blob waarnaar u het bestand hebt geüpload. In dit artikel is dit de blob met de naam TestPayload.txt.

    Schermopname van het selecteren van het geüploade bestand in Azure Portal.

  6. Bekijk de blobeigenschappen op de pagina die wordt geopend. U kunt Downloaden selecteren om het bestand te downloaden en de inhoud lokaal weer te geven.

Volgende stappen

In dit artikel hebt u geleerd hoe u de functie voor het uploaden van bestanden van IoT Hub gebruikt om het uploaden van bestanden vanaf apparaten te vereenvoudigen. U kunt deze functie blijven verkennen met de volgende artikelen: