如何上传多个答案与图像字节串数据



根据Consumer Surveys文档,questions[].images[].data字段采用字节数据类型。

我使用Python 3实现,但API给出错误,如Invalid ByteString或字节类型is not JSON serializable.

我使用下面的代码:

    import base64
    import urllib
    url = 'http://example.com/image.png'
    raw_img = urllib.request.urlopen(url).read()
    # is not JSON serializable due to json serializer not being able to serialize raw bytes
    img_data = raw_img
    # next errors: Invalid ByteString, when tried with base64 encoding as followings:
    img_data = base64.b64encode(raw_img)
    # Also tried decoding it to UTF.8 `.decode('utf-8')`

img_data是被发送到API的JSON有效负载的一部分。

我错过了什么吗?什么是正确的方式来处理图像数据上传的问题?我查了https://github.com/google/consumer-surveys/tree/master/python/src,但是没有这个部分的例子。

谢谢

您需要使用web-safe/URL-safe编码。这里有一些关于在Python中执行此操作的文档:https://pymotw.com/2/base64/#url-safe-variations

在您的例子中,它看起来像

img_data = base64.urlsafe_b64encode(raw_img)

ETA:在Python 3中,API期望图像数据为str类型,因此可以进行JSON序列化,但base64.urlsafe_b64encode方法以UTF-8 bytes的形式返回数据。您可以通过将字节转换为Unicode来修复此问题:

img_data = base64.urlsafe_b64encode(raw_img)
img_data = img_data.decode('utf-8')

相关内容

  • 没有找到相关文章

最新更新