【问题标题】:How can I pass images in a server's response using JSON? Base64?如何使用 JSON 在服务器响应中传递图像? Base64?
【发布时间】:2011-06-30 18:42:11
【问题描述】:

在我的 android 应用程序中,我在 ListView 中显示了一些用户。我想显示(用户的图片、名字、姓氏)。现在,它仅适用于 first_name 和 last_name。我想添加图片。我从服务器(python)收到的数据 JSON 是这样的:

[{"profil":"first_name": "Jim", "last_name": "Carrey"}}, "_id": {"$oid": "4d595cda1d41c81536000000"}}, {"profil":{"first_name": "Mathieu", "last_name": "Polnari"}}, "_id": {"$oid": "4d5916581d41c80e88000000"}}, {"profil": {"first_name": "Vincent", "last_name": "Fatou"}}, "_id": {"$oid": "4d58fc7e1d41c8090e000000"}}...] 

如果我在那个JSON中为图片添加一个参数应该会更好。

您认为将图片作为 JSON 中的字符串返回并使用 Base64 对其进行解码是一个好主意吗?

【问题讨论】:

  • 您能解释一下如何使用 Base64 将图像转换为 JSON 吗?这会帮助我。好像你知道怎么做,只是问是否有任何费用。

标签: python android image listview base64


【解决方案1】:

从技术上讲,将二进制数据编码为 base64 字符串并将其包含在 JSON 中是完全可以的。

但是,正如@servermanfail 所指出的,您最好将图像链接嵌入到 JSON 中并在第二步中下载它们。

额外的好处是传输的大小/速度,因为 base64 流是原始二进制流大小的 4/3(33% 开销)。

此外,在这种情况下,您可以缓存图像。

【讨论】:

  • 这对我来说会更困难,因为我想在获取 JSON 的 AsynTask 的 PostExecute() 上设置文本和图片。如果我在另一个线程中下载图片会出现问题。
  • 我能看到的唯一问题可能是性能和内存消耗。您应该使用您的典型图像尺寸进行一些测试。
  • 如果图片非常小,单独请求每个图片的开销可能会超过使用 base64 所浪费的开销。
  • 是的。我将尝试使用 base64,在客户端和服务器端都更容易实现,我只需要解码响应。如果解码的时间太长,我会看看用url下载图片。还是谢谢。
  • @Thomas K:这些图像只是个人资料图片的小预览。用户数量可以超过 15 个用户......我必须决定是在 15 个不同的请求中下载 15 个小图像,还是只使用 base64 解码它们。你怎么看?
【解决方案2】:

我建议添加一个包含资源 URL 的 JSON 参数。

为了增加安全性,您可以通过向资源添加带有盐校验和的 md5 来创建加密 URL,例如 http://server.com/images/1234567890123456789012345678901234567890/image.jpg - 这是 facebook.com 使用的方法。

【讨论】:

  • MD5 不是encryption,因此无法解密。
  • 无需解密文件名 - 您可以将此 MD5-references 保留在数据库中的图像名称旁边。 MD5-ing 图像名称的全部要点是为了防止猜测它。
猜你喜欢
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2017-02-25
相关资源
最近更新 更多