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裝置可以有更彈性與更便利的整合運用
參考資料
從裝置上傳檔案