继承我的情况:
我的服务器上运行了RESTful WCF服务,该服务旨在从数据库中获取有关人员的各种类型的数据,并使这些数据作为单个JSON对象可用。它很棒!
[编辑]还有另一项服务在服务器上的文件系统中维护图像缓存。当请求发送到RESTful服务时,该服务然后从图像服务请求图像。如果图像已经在缓存中(与请求的宽度,高度和人员相同),则返回该图像(作为字节数组)。我们必须使用这项服务来检索图像。
现在我想要的是那个人的形象。在我们的数据库中,图像是一个很长的原始(ew)。但是,我已经处理过这个问题(上一段)。该图像现在是一个Byte数组。我对android很新,我不确定检索此图像的最佳方法是什么。我认为我可以做的是将字节数组添加到JSON对象,然后使用base64解码器将其转换为可绘制的图像。但是,每当我尝试时,它会超时并告诉我在JSON对象的char缓冲区的某个任意索引处预期','或']'。
我已经能够从JSON对象中提取少量数据而没有问题,但是现在它中有一个巨大的字节数组,JSONObject很讨厌我。从我的服务中获取此图像的更好方法是什么?
答案 0 :(得分:10)
答案 1 :(得分:0)
在storing images上查看此问题,最好将此类数据存储在文件系统中。如果可能,请弃用该字段,并创建脚本以将现有图像移动到文件系统。
然后,您应该将图像存储在可以通过URL检索的文件系统(或某种内容管理系统)上。
然后将URL存储在数据库中。然后你可以在你的json对象中发送它。
{
...
image_url:<url from database>
...
}
当客户收到此消息时,它将调用该URL并下载图像。
您的客户端必须单独调用以检索图像,但通常比使用二进制数据填充数据库更好。如果您希望快速显示数据,同时允许在后台下载图像,这也可以发挥作用。
答案 2 :(得分:0)
比使用Base64编码更好的方法是返回Stream(来自WCF RAW programming)
[OperationContract, WebGet]
public Stream GetTestImage(Image image)
{
MemoryStream stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
stream.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
return stream;
}