[IoT] Azure IoT整合應用七:將檔案從裝置端傳入至IoT Hub,並將檔案存入儲存體之中

Microsoft Azure IoT Hub,於2017年2月作了一些更新之後,增加了一些強化的功能
其中[檔案上傳]就是一個新增加的功能,可以讓裝置透過IoT Hub進行裝置中檔案的上傳,並存入至雲端儲存體的動作

若是還不熟悉Azure IoT Hub的話,可以先參考這篇[IoT] Azure IoT整合應用一:建立Azure上的IoT Hub並發送訊息至IoT Hub中的實作,以便接續本篇文章的內容

要開啟並完成裝置上傳檔案至IoT Hub,並存入儲存體的動作很簡單,照著下面的步驟就可以完成了

1.在Azure上建立一個新的儲存體,並設定為[資源管理員],帳戶用途就先選用[一般用途]

2.在這個儲存體中,建立一個新的容器,並給予一個名稱,容器的存取類型依需求可以選擇不同的類型內容,這裡就不再贅述

3.建立完儲存體之後,回到IoT Hub的功能中,點選選單裡的[檔案上傳]項目

4.點選[儲存體容器],並選擇剛剛建立好的儲存體以及其容器項目點選指定的[儲存體]後,再接著選擇剛才建立好的容器,選擇完成後點擊下方的[選取][儲存]完成檔案上傳的設定Azure上IoT Hub的設定,就只要執行這個步驟就可以,接下來就回到Visual Studio裡,開啟Client端Device的程式碼

5.開啟Client端的程式碼,在畫面上放置一個檔案上傳的文字方塊,以及上傳後Blob名稱的文字方塊

6.於點選[Upload]檔案上傳的Button事件中,加入下面的程式碼

/// <summary>
/// 傳送檔案到IoT Hub中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnUploadFile_Click(object sender, EventArgs e)
{
    string strDeviceId = txtDeviceId.Text;
    string strDeviceKey = txtDeviceKey.Text;

    DeviceClient deviceClient = DeviceClient.Create(strIoTHubUrl,
        new DeviceAuthenticationWithRegistrySymmetricKey(strDeviceId, strDeviceKey));

    using (var fileStream = new FileStream(txtFileName.Text, FileMode.Open, FileAccess.Read))
    {
        await deviceClient.UploadToBlobAsync(txtBlobName.Text, fileStream);
        MessageBox.Show("檔案已傳送成功");
    }
}

這一段程式碼主要的目的,就是建立一個Client端的Device物件,並透過FileStream的方法,開啟指定的檔案成為資料流,最後透過UploadToBlobAsync的方法,將檔案上傳至IoT Hub之中

從這張圖上可以看到,點選了開啟檔案路徑的功能,並指定要寫入的Blob Name,就可以實際執行檔案上傳的動作

7.檔案上傳完成後,可以在儲存體的容器中看到IoT Hub在這個容器裡,建立了一個上傳檔案的DeviceId的資料夾,並將剛剛上傳的檔案,寫入至這個資料夾之中

IoT Hub從最一開始只能接收與逆送文字訊息的基本功能,到2017年2月的更新後,提供了裝置進行檔案上傳的動作,讓IoT裝置可以有更彈性與更便利的整合運用

參考資料
從裝置上傳檔案

Github網址
https://github.com/madukapai/maduka-Azure-IoT