Python 如何将文本数据和文件从物联网设备发送到云物联网核心?

Python 如何将文本数据和文件从物联网设备发送到云物联网核心?,python,google-cloud-storage,mqtt,google-cloud-iot,Python,Google Cloud Storage,Mqtt,Google Cloud Iot,我正在将图像从树莓Pi发送到云物联网核心。这是可行的,但我现在意识到,在谷歌云存储中存储文件时,我还需要文件名(或我添加到文件名中的数据),但据我所知,发送的只是文件的内容。我试图用下面的代码提取来完成这一点,但这似乎不起作用,我想这是可以理解的,因为它是JSON对象中的字节数组 有办法吗?当通过云函数发送到存储器时,文件名是否可以检索 with open(filename, 'rb') as f: imagestring = f.read() byteArray = bytes(ima

我正在将图像从树莓Pi发送到云物联网核心。这是可行的,但我现在意识到,在谷歌云存储中存储文件时,我还需要文件名(或我添加到文件名中的数据),但据我所知,发送的只是文件的内容。我试图用下面的代码提取来完成这一点,但这似乎不起作用,我想这是可以理解的,因为它是JSON对象中的字节数组

有办法吗?当通过云函数发送到存储器时,文件名是否可以检索

with open(filename, 'rb') as f:
    imagestring = f.read()
byteArray = bytes(imagestring)

now = datetime.datetime.now()
datetime_formatted = now.strftime("%Y-%m-%d_%H:%M:%S")
filename = 'img_GM4_' + datetime_formatted +'.jpg'

payload = '{{ "ts": {}, filename: {}, "image": {}}}'.format(int(time.time()), filename, byteArray)

client.publish(_MQTT_TOPIC, payload, qos=1)
# Previously: client.publish(_MQTT_TOPIC, byteArray, qos=1)

为了在云存储中保存映像,您需要使用一个

云功能应包括以下步骤:

  • 以与类似的方式从的数据属性解码数据
  • 从文件名字段中提取值并转换
  • 使用可用方法之一将图像上载到云存储。例如,与RESTAPI和任何可用的请求库(例如)类似。您可以在文档中找到编码示例

  • 最后,请注意,根据需要,您应该避免文件名基于时间戳(这将限制吞吐量)。在云存储环境中,建议在中创建文件名。因此,如果您注意到应用程序中存在性能问题,请考虑最后一条消息。

    此答案假定数据是base64编码的。我没有这样做,因为没有必要使用MQTT。您的意思是必须进行base64编码才能检索文件名吗?请注意,一般情况下,发布/订阅消息的数据作为base64编码的字符串存储在PubsubMessage对象的中。这就是为什么我包括了这一步。如果不是这样,您可以省略解码部分并获得所需的字段。如何访问文件名字段?我不知道
    helloPubSub
    函数的
    事件
    对象中有一个。(我正在用Typescript btw编写我的函数)。文件名字段应该位于云发布/子主题(应该使用
    client.publish(_MQTT\u topic,payload,qos=1)的数据(需要解析)上。
    )。如果您没有收到云发布/订阅上的数据,请参阅以获取疑难解答。确定。我可以毫无问题地将数据发送到Pub/Sub,但是如果能描述一下如何(解析数据和)检索文件名,我将不胜感激。