使用 AWS IoT 将 100MB 以上的文件从 AWS 云流式传输到物体

Stream 100MB+ file from AWS Cloud to the Thing using AWS IoT

场景是这样的。我们有一个 IoT device/thing,在设置时需要一些驱动程序和固件。有些文件很大,比如 100MB 以上,在这些情况下,我们不想一次性发送数据,而是希望将数据从 AWS 云流式传输到 THING。

我一直在寻找实现它的方法,并且有一个像 IoT Streaming 服务这样的选项,但是没有关于如何在 Nodejs 中实现它的基本代码文档。我是 nodejs 和 IoT 方面的新手,所以如果有人可以向我指出一些帮助文档或网站以了解如何操作,那就太好了!

使用下面的代码,我不能传输超过 10MB。

iot.createStream(params, function (err, data) {
   if (err) return err;
   return data;
})

我们得到的错误:

流中流文件0的文件大小221413376超过文件大小限制

createStream 的参数:

    files: [ /* required */
      {
        fileId: 0,
        s3Location: {
          bucket: bucket, /* required */
          key: params.s3key
        }
      }
    ],
    roleArn: config.jobRoleARN, /* required */
    streamId: uuidv1(), /* required */
   description: 'Get file as Stream'
  }```

This documentation from AWS 建议流式传输的最大文件大小为 24MB。如果是这种情况,您可能需要尝试将文件分解成更小的部分,或者看看是否可以将其压缩到合理的大小(或两者)。

仅补充说明:根据您对返回数据的处理方式,您可能希望利用管道和 transform/writable 流来利用 node's backpressure handling mechanisms,如下所示:

const request = iot.createStream(params);
const out = fs.createWriteStream('/path/to/outfile.jpg');

request.createReadStream().pipe(out);

单独处理文件 I/O 时,这可能没什么大不了的,因为文件输出 应该 比通过网络传入的数据更快,但它尽可能使用管道并避免直接监听传入流的 'data' 事件的情况仍然是一个好习惯。