将图像从Android应用程序存储到Datastore / Google Cloud Storage的最佳方法是什么?

时间:2016-04-02 11:38:08

标签: java android google-app-engine bitmap google-cloud-datastore

我试图将Google地图快照(来自Android)存储到数据存储区中,但我遇到了一些麻烦:

快照是一个位图,转换为字符串数组,但是由于代理字符较低而崩溃了。

我通过将StringUtils.newStringUtf8(byteAray)更改为new String(byteArray, Charset.forName("ISO-8859-15"))来解决此问题。

现在它不会保存我的实体因为"错误413:请求太长"。

有关信息,请参阅以下字节数组:

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream);
    byte [] bytes = stream.toByteArray();

那么如何才能将该位图有效地存储到数据存储区(或其他解决方案),以便能够在我的Android应用程序中将其恢复到其他位置?

2 个答案:

答案 0 :(得分:1)

请注意,对于大型二进制对象,您最好使用Blobstore API Google Cloud Storage

如果您确定图片文件总是低于1MB,则可以使用Blob entity property type

答案 1 :(得分:1)

您收到的错误:

  

错误413:请求太长

您可以通过在客户端中缩小快照来解决。我很确定现代手机的大多数快照都将超过1MB,因此您肯定会收到此错误,因为数据存储只能采用低于1MB的Base64编码字符串。

我建议您在对图像进行编码并将其发送到数据存储区之前缩小图像。

如果您想保持原始尺寸,另一个选择是使用Google Cloud Storage,具体而言,根据您的情况,使用签名上传网址,您可以在其中创建signed URL,然后将图片上传到其中