您似乎希望在云到设备的消息通道上接收文件上传通知。这不是这些通知出现的地方。
Azure IoT Hub 有两种类型的 SDK:设备SDK 和服务SDK。
- 上传文件的功能位于设备 SDK(azure-iot-device包)中。
- 监视文件上传通知(来自所有设备)的功能位于服务 SDK(azure-iothub包)中。
在Device SDK 上传完成后,会调用该uploadToBlob
方法的回调。
来自示例
var Protocol = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var fs = require('fs');
var filePath = '[path/to/file]';
var client = Client.fromConnectionString(deviceConnectionString, Protocol);
fs.stat(filePath, function (err, fileStats) {
var fileStream = fs.createReadStream(filePath);
client.uploadToBlob('testblob.txt', fileStream, fileStats.size, function (err, result) {
if (err) {
console.error('error uploading file: ' + err.constructor.name + ': ' + err.message);
} else {
console.log('Upload successful - ' + result);
}
fileStream.destroy();
});
});
如果要在设备将文件上传到 blob 时监听通知,则需要使用Service SDK 。使用客户端获取“文件通知接收器”,然后监听该对象的“消息”事件。
示例的来源
var Client = require('azure-iothub').Client;
var client = Client.fromConnectionString(connectionString);
client.open(function (err) {
if (err) {
console.error('Could not connect: ' + err.message);
} else {
console.log('Client connected');
client.getFileNotificationReceiver(function(err, receiver) {
if(err) {
console.error('Could not get file notification receiver: ' + err.message);
} else {
receiver.on('message', function(msg) {
console.log('File uploaded: ');
console.log(msg.data.toString());
receiver.complete(msg, function(err) {
if (err) {
console.error('Could not complete the message: ' + err.message);
} else {
console.log('Message completed');
}
});
});
}
});
}
});