【问题标题】:What is the best way to store image from Android app to Datastore/Google Cloud Storage?将图像从 Android 应用程序存储到 Datastore/Google Cloud Storage 的最佳方式是什么?
【发布时间】:2016-04-02 11:38:08
【问题描述】:

我正在尝试将 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 应用程序的其他地方取回它?

【问题讨论】:

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


    【解决方案1】:

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

    如果您确定您的图像文件始终小于 1MB,您可以使用Blob entity property type

    【讨论】:

      【解决方案2】:

      你得到的错误:

      错误 413:请求太长

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

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

      如果你想保持原来的大小,你的另一个选择是使用Google Cloud Storage,具体来说,对于你的情况,签名上传网址,你可以创建一个signed URL,然后将你的图片上传到它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-17
        • 2012-04-06
        • 1970-01-01
        • 2016-09-29
        • 2011-08-09
        • 2015-07-16
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多