【问题标题】:Stream 100MB+ file from AWS Cloud to the Thing using AWS IoT使用 AWS IoT 将 100MB 以上的文件从 AWS 云流式传输到事物
【发布时间】:2021-03-15 13:18:35
【问题描述】:

所以这是场景。我们有一个物联网设备/东西,在设置时需要一些驱动程序和固件。有些文件非常大,例如 100MB 以上,在这种情况下,我们希望将数据从 AWS 云流式传输到 THING,而不是一次性发送数据。

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

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

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

我们得到的错误:

stream中文件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'
  }```

【问题讨论】:

    标签: node.js amazon-web-services iot aws-iot


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复和指出路径。这里的主要问题是,我们正在传输的文件在 s3 存储桶中,原始帖子中提到了 iot.createStream 的参数。我们只是指 s3key 来创建 Stream。在这种情况下,如何拆分文件?对不起,如果这听起来很傻,但我是 Nodejs 或 IoT 的菜鸟!我相信我不能在 s3 中存储多个文件并将它们全部传递到多个流中以进行单个 OTA 更新。如果没有,那你能告诉我一条通往这个的道路吗?
    • 如果文件拆分路径甚至可行(假设您可以在 iot 设备上重新组装文件),您必须先将其拆分,然后才能将其存储在 s3 中。对此我无能为力。您的另一个潜在选择(如果可行,可能会添加到答案中)是直接从 s3 流式传输文件,而不是通过 iot 流。从它的声音来看,由于这些只是驱动程序文件,因此通过 iot 模块检索文件可能没有任何好处。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2019-04-13
    相关资源
    最近更新 更多