无法将 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的主要内容,如果未能解决你的问题,请参考以下文章

图像 Base64 未在 JSON 请求中正确发送

将base64字符串发送到c#服务器

base64的使用案例

如何将带有图像(base 64 字符串)的电子邮件中的 html 发送到 Outlook、gmail 等

通过http方式传递base64图片字符串无法还原成图片

前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,无法使用ajax