无法将 base64 字符串发送到 PubNub
Posted
技术标签:
【中文标题】无法将 base64 字符串发送到 PubNub【英文标题】:Cannot send base64 String to PubNub 【发布时间】:2018-12-22 22:16:42 【问题描述】:我正在使用 Raspberry Pi 的 PyCamera 模块来捕获图像并存储为.jpg
。
首先使用 base64.encodestring() 对图像进行编码。但是在将编码字符串发送到 PubNub 服务器时,我在 my_publish_callback
上收到错误
('ERROR: ', 'Expecting value: line 1 column 1 (char 0)')
('ERROR: ', JSONDecodeError('Expecting value: line 1 column 1 (char 0)',))
我尝试过使用 base64.b64encode() 但仍然遇到相同的错误。我已经在 python 2 和 3 中尝试过脚本;
def my_publish_callback(envelope, status):
if not status.is_error():
pass # Message successfully published to specified channel.
else:
#print("recv: ", envelope)
print("ERROR: ", status.error_data.information)
print("ERROR: ", status.error_data.exception)
def publish(channel, msg):
pubnub.publish().channel(channel).message(msg).async(my_publish_callback)
def captureAndSendImage():
camera.start_preview()
time.sleep(2)
camera.capture("/home/pi/Desktop/image.jpg")
camera.stop_preview()
with open("/home/pi/Desktop/image.jpg", "rb") as f:
encoded = base64.encodestring(f.read())
publish(myChannel, str(encoded))
我无法找到或打印完整的错误回溯,因此我可以获得更多关于错误发生位置的线索。但看起来 PubNub 正在尝试解析 JSON 格式的数据,但失败了。
【问题讨论】:
在 PubNub Python SDK 中启用日志记录并将完整的日志文件发送到PubNub Support(请附上日志文件)。顺便说一句,你应该考虑this file sharing solution with PubNub。 您是否尝试过发送 JSON 对象作为消息,而不是像本示例中所示的纯字符串pubnub.publish().channel(channel).message('image': msg)
pubnub.com/docs/python/data-streams-publish-and-subscribe ?
纯字符串将(应该)工作。事实上,当您在 PubNub 初始化中提供密码密钥时,消息会被加密,从而生成一个字符串。
Anum Sheraz - 期待 PubNub SDK 日志,但您能验证是否确实有正在读取的位吗?错误消息让我认为没有读取文件位(路径错误?)当我用谷歌搜索错误时,我发现了这个 SO 帖子:***.com/questions/16573332/… - 有三个答案,它们都可能是你的根本原因。请报告并让我们知道。
我意识到 .jpg 文件大小是 154KB,而 PubNub 最大数据包大小是 32KB,所以应该清楚地说明一切。 @Craig 感谢您提及该链接,尽管 support.pubnub.com/support/discussions/topics/14000006326 很有用
【参考方案1】:
我意识到 .jpg 文件大小是 154KB,而 PubNub 最大数据包大小是 32KB,所以应该清楚地说明一切。 PubNub 建议通过拆分它们并在订阅者端重新排列它们来发送大消息。感谢@Craig 引用该链接,尽管它很有用 support.pubnub.com/support/discussions/topics/14000006326
【讨论】:
以上是关于无法将 base64 字符串发送到 PubNub的主要内容,如果未能解决你的问题,请参考以下文章