Bagikan melalui


Mengunggah file dari perangkat Anda ke cloud dengan Azure IoT Hub (Node.js)

Artikel ini memperlihatkan cara menggunakan Node.js untuk kemampuan pengunggahan file IoT Hub untuk mengunggah file ke penyimpanan Azure blob.

Mulai cepat Mengirim telemetri dari perangkat ke hub IoT dan artikel Mengirim pesan cloud-ke-perangkat dengan IoT Hub menunjukkan fungsionalitas dasar olahpesan perangkat-ke-cloud dan cloud-ke-perangkat IoT Hub. Tutorial Mengonfigurasi Perutean Pesan dengan IoT Hub menunjukkan cara untuk menyimpan pesan perangkat ke cloud secara andal dalam penyimpanan blob Microsoft Azure. Namun, dalam beberapa skenario Anda tidak dapat dengan mudah memetakan data yang dikirim perangkat Anda ke pesan perangkat ke cloud yang relatif kecil yang diterima IoT Hub. Contohnya:

  • Video
  • File besar yang berisi gambar
  • Data getaran yang diambil sampelnya pada frekuensi tinggi
  • Beberapa formulir data yang telah diproses sebelumnya.

File tersebut biasanya diproses secara batch di cloud menggunakan alat seperti Azure Data Factory atau tumpukan Hadoop. Jika Anda perlu meningkatkan file dari perangkat, Anda masih dapat menggunakan keamanan dan keandalan IoT Hub. Artikel ini menunjukkan cara.

Di akhir artikel ini, Anda menjalankan dua aplikasi konsol Node.js:

  • FileUpload.js, yang mengunggah file ke penyimpanan menggunakan SAS URI yang disediakan oleh hub IoT Anda.

  • FileUploadNotification.js, yang menerima pemberitahuan unggahan file dari hub IoT Anda.

Catatan

IoT Hub mendukung banyak platform dan bahasa perangkat, (termasuk C, Java, Python, dan JavaScript) melalui Azure IoT device SDK. Lihat Azure IoT Developer Center untuk mempelajari cara menghubungkan perangkat Anda ke Azure IoT Hub.

Penting

Fungsionalitas pengunggahan file pada perangkat yang menggunakan autentikasi otoritas sertifikat (OS) X.509 berada dalam pratinjau publik, dan mode pratinjau harus diaktifkan. Ini umumnya tersedia di perangkat yang menggunakan autentikasi thumbprint X.509 atau pengesahan sertifikat X.509 dengan Layanan Provisi Perangkat Azure. Untuk mempelajari selengkapnya tentang autentikasi X.509 dengan IoT Hub, lihat Sertifikat X.509 yang didukung.

Prasyarat

  • Hub IoT. Membuat satu dengan CLI atau portal Azure.

  • Perangkat yang terdaftar. Daftarkan perangkat di portal Azure.

  • Node.js versi 10.0.x atau yang lebih baru. Versi LTS direkomendasikan. Anda dapat mengunduh Node.js dari nodejs.org.

  • Port 8883 harus terbuka di firewall Anda. Sampel perangkat dalam artikel ini menggunakan protokol MQTT, yang berkomunikasi melalui port 8883. Port ini dapat diblokir di beberapa lingkungan jaringan perusahaan dan pendidikan. Untuk informasi selengkapnya dan cara mengatasi masalah ini, lihat Menyambungkan ke Azure IoT Hub (MQTT).

Mengaitkan akun Microsoft Azure Storage dengan IoT Hub

Untuk mengunggah file dari perangkat, Anda harus memiliki akun Azure Storage dan kontainer Azure Blob Storage yang terkait dengan hub IoT Anda. Setelah Anda mengaitkan akun penyimpanan dan kontainer dengan hub IoT, hub IoT Anda dapat menyediakan elemen URI SAS saat diminta oleh perangkat. Perangkat kemudian dapat menggunakan elemen ini untuk membangun URI SAS yang digunakan untuk melakukan autentikasi dengan Azure Storage dan mengunggah file ke kontainer blob.

Untuk mengaitkan akun Azure Storage dengan hub IoT Anda:

  1. Di bagian Pengaturan Hub, pilih Unggah file di panel kiri IoT hub Anda.

    Cuplikan layar yang menunjukkan pilih pengaturan pengunggahan file tertentu dari portal.

  2. Di panel Unggahan file, pilih Kontainer Azure Storage. Untuk artikel ini, sebaiknya akun penyimpanan dan IoT Hub Anda berada di wilayah yang sama.

    • Jika Anda sudah memiliki akun penyimpanan yang ingin digunakan, pilih dari daftar.

    • Pilih +Akun Storage untuk membuat akun penyimpanan. Masukkan nama akun penyimpanan dan pastikan Lokasi diatur ke wilayah yang sama dengan hub IoT Anda, lalu pilih OK. Akun baru dibuat dalam grup sumber daya yang sama dengan hub IoT Anda. Saat penyebaran selesai, pilih akun penyimpanan dari daftar.

    Setelah akun penyimpanan dipilih, panel Kontainer akan terbuka.

  3. Di halaman Kontainer, pilih kontainer blob.

    • Jika Anda sudah memiliki kontainer blob yang ingin digunakan, pilih dari daftar dan klik Pilih.

    • Pilih + Kontainer untuk membuat kontainer blob baru. Masukkan nama kontainer baru. Untuk tujuan artikel ini, Anda dapat membiarkan semua bidang lainnya dengan opsi default-nya. Pilih Buat. Setelah penyebaran selesai, pilih kontainer dari daftar dan klik Pilih.

  4. Kembali ke panel Unggahan file, pastikan bahwa pemberitahuan file diatur ke Aktif. Anda dapat membiarkan pengaturan lainnya dengan opsi default-nya. Pilih Simpan dan tunggu hingga pengaturan selesai sebelum berpindah ke bagian selanjutnya.

    Cuplikan layar yang menunjukkan konfirmasi pengaturan pengunggahan file di portal.

Untuk petunjuk yang lebih mendetail tentang cara membuat akun Azure Storage, lihat Membuat akun penyimpanan. Untuk petunjuk selengkapnya tentang cara mengaitkan akun penyimpanan dan kontainer blob dengan hub IoT, lihat Mengonfigurasi unggahan file menggunakan portal Azure.

Mengunggah file dari aplikasi perangkat

Di bagian ini, Anda membuat aplikasi perangkat untuk mengunggah file ke hub IoT. Kode berdasarkan pada kode yang tersedia di sampel upload_to_blob_advanced.js di sampel perangkat Azure IoT Node.js SDK.

  1. Buat folder kosong bernama fileupload. Di folder fileupload, buat file package.json menggunakan perintah berikut di perintah Anda. Terima semua defaultnya:

    npm init
    
  2. Pada perintah di folder fileupload, jalankan perintah berikut untuk memasangl SDK Perangkat azure-iot-device, azure-iot-device-mqtt, dan paket @azure/storage-blob:

    npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save
    
  3. Menggunakan editor teks, buat file FileUpload.js di folder fileupload, lalu salin kode berikut ke dalamnya.

    'use strict';
    
    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');
    
    const {
      AnonymousCredential,
      BlockBlobClient,
      newPipeline
    } = require('@azure/storage-blob');
    
    // make sure you set these environment variables prior to running the sample.
    const deviceConnectionString = process.env.DEVICE_CONNECTION_STRING;
    const localFilePath = process.env.PATH_TO_FILE;
    const storageBlobName = path.basename(localFilePath);
    
    async function uploadToBlob(localFilePath, client) {
      const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
      if (!blobInfo) {
        throw new errors.ArgumentError('Invalid upload parameters');
      }
    
      const pipeline = newPipeline(new AnonymousCredential(), {
        retryOptions: { maxTries: 4 },
        telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
        keepAliveOptions: { enable: false }
      });
    
      // Construct the blob URL to construct the blob client for file uploads
      const { hostName, containerName, blobName, sasToken } = blobInfo;
      const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;
    
      // Create the BlockBlobClient for file upload to the Blob Storage Blob
      const blobClient = new BlockBlobClient(blobUrl, pipeline);
    
      // Setup blank status notification arguments to be filled in on success/failure
      let isSuccess;
      let statusCode;
      let statusDescription;
    
      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);
      }
    
      await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);
    }
    
    // Create a client device from the connection string and upload the local file to blob storage.
    const deviceClient = Client.fromConnectionString(deviceConnectionString, Protocol);
    uploadToBlob(localFilePath, deviceClient)
      .catch((err) => {
        console.log(err);
      })
      .finally(() => {
        process.exit();
      });
    
  4. Simpan dan tutup file FileUpload.js.

  5. Salin file gambar ke folder fileupload dan beri nama seperti myimage.png.

  6. Tambahkan variabel lingkungan untuk string koneksi perangkat Anda dan jalur ke file yang ingin diunggah. Anda mendapatkan perangkat string koneksi saat mendaftarkan perangkat di hub IoT.

    • Untuk Windows:

      set DEVICE_CONNECTION_STRING={your device connection string}
      set PATH_TO_FILE={your image filepath}
      
    • Untuk Linux/Bash:

      export DEVICE_CONNECTION_STRING="{your device connection string}"
      export PATH_TO_FILE="{your image filepath}"
      

Mendapatkan string koneksi IoT hub

Dalam artikel ini, Anda membuat layanan ujung belakang untuk menerima pesan pemberitahuan unggahan file dari hub IoT yang Anda buat. Untuk menerima pesan pemberitahuan unggahan file, layanan Anda memerlukan izin sambungkan layanan. Secara default, setiap IoT Hub dibuat dengan kebijakan akses bersama bernama layanan yang memberikan izin ini.

Untuk mendapatkan string koneksi Azure IoT Hub untuk kebijakan layanan, ikuti langkah-langkah berikut:

  1. Di portal Azure, pilih Grup sumber daya. Pilih grup sumber daya tempat hub Anda berada, lalu pilih hub Anda dari daftar sumber daya.

  2. Di panel sisi kiri hub IoT Anda, pilih Kebijakan akses bersama.

  3. Dari daftar kebijakan, pilih kebijakan layanan.

  4. Salin String koneksi utama dan simpan nilainya.

Cuplikan layar menampilkan cara mengambil string koneksi dari IoT Hub Anda di portal Azure.

Untuk mengetahui informasi selengkapnya tentang kebijakan dan izin akses bersama IoT Hub, lihat Kontrol akses dan izin.

Menerima pemberitahuan unggahan file

Di bagian ini, Anda membuat aplikasi konsol Node.js yang menerima pesan pemberitahuan unggahan file dari IoT Hub.

  1. Buat folder kosong bernama fileuploadnotification. Di folder fileuploadnotification, buat file package.json menggunakan perintah berikut di perintah Anda. Terima semua defaultnya:

    npm init
    
  2. Pada perintah Anda di folder fileuploadnotification, jalankan perintah berikut untuk memasang paket SDK Azure-iothub:

    npm install azure-iothub --save
    
  3. Denganmenggunakan editor teks, buat file FileUploadNotification.js di folder fileuploadnotification.

  4. Tambahkan pernyataan require berikut di awal file FileUploadNotification.js:

    'use strict';
    
    const Client = require('azure-iothub').Client;
    
  5. Baca string koneksi untuk hub IoT Anda dari lingkungan:

    const connectionString = process.env.IOT_HUB_CONNECTION_STRING;
    
  6. Tambahkan kode berikut untuk membuat klien layanan dari string koneksi:

    const serviceClient = Client.fromConnectionString(connectionString);
    
  7. Buka klien dan gunakan fungsi getFileNotificationReceiver untuk menerima pembaruan status.

    serviceClient.open(function (err) {
      if (err) {
        console.error('Could not connect: ' + err.message);
      } else {
        console.log('Service client connected');
        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');
                }
              });
            });
          }
        });
      }
    });
    

    Catatan

    Jika Anda ingin menerima pemberitahuan pemutusan saat Anda mendengarkan pemberitahuan pengunggahan file, Anda harus mendaftarkan 'error' dengan menggunakan receiver.on. Untuk terus menerima pemberitahuan pengunggahan file, Anda perlu terhubung kembali ke IoT Hub dengan menggunakan metode serviceClient.open.

  8. Simpan dan tutup file FileUploadNotification.js.

  9. Tambahkan variabel lingkungan untuk string koneksi IoT Hub Anda. Anda menyalin string ini sebelumnya di Dapatkan string koneksi hub IoT.

    • Untuk Windows:

      set IOT_HUB_CONNECTION_STRING={your iot hub connection string}
      
    • Untuk Linux/Bash:

      export IOT_HUB_CONNECTION_STRING="{your iot hub connection string}"
      

Menjalankan aplikasi

Sekarang Anda siap untuk menjalankan aplikasi.

Pada prompt perintah di folder fileuploadnotification, jalankan perintah berikut:

node FileUploadNotification.js

Pada prompt perintah di folder fileupload, jalankan perintah berikut:

node FileUpload.js

Output berikut dari aplikasi FileUpload setelah pengunggahan selesai:

uploadStreamToBlockBlob success
notifyBlobUploadStatus success

Output sampel berikut dari aplikasi FileUploadNotification setelah pengunggahan selesai:

Service client connected
File upload from device:
{"deviceId":"myDeviceId","blobUri":"https://{your storage account name}.blob.core.windows.net/device-upload-container/myDeviceId/image.png","blobName":"myDeviceId/image.png","lastUpdatedTime":"2021-07-23T23:27:06+00:00","blobSizeInBytes":26214,"enqueuedTimeUtc":"2021-07-23T23:27:07.2580791Z"}

Memverifikasi unggahan file

Anda dapat menggunakan portal untuk menampilkan file yang diunggah di kontainer penyimpanan yang Anda konfigurasikan:

  1. Navigasikan ke akun penyimpanan Anda di portal Microsoft Azure.

  2. Di panel kiri akun penyimpanan Anda, pilih Kontainer.

  3. Pilih kontainer tempat Anda mengunggah file.

  4. Pilih folder yang dinamai sesuai dengan peranti Anda.

  5. Pilih blob tempat Anda mengunggah filenya. Pada artikel ini, itu adalah blob dengan nama yang sama dengan file Anda.

    Cuplikan layar melihat file yang diunggah di portal Microsoft Azure.

  6. Lihat properti blob pada halaman yang terbuka. Anda dapat memilih Unduh untuk mengunduh file dan melihat kontennya secara lokal.

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara menggunakan fitur pengunggahan file IoT Hub untuk menyederhanakan pengunggahan file dari perangkat. Anda dapat terus menjelajahi fitur ini dengan artikel berikut: