我试图将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应用程序中将其恢复到其他位置?
答案 0 :(得分:1)
请注意,对于大型二进制对象,您最好使用Blobstore API Google Cloud Storage。
如果您确定图片文件总是低于1MB,则可以使用Blob entity property type。
答案 1 :(得分:1)
您收到的错误:
错误413:请求太长
您可以通过在客户端中缩小快照来解决。我很确定现代手机的大多数快照都将超过1MB,因此您肯定会收到此错误,因为数据存储只能采用低于1MB的Base64编码字符串。
我建议您在对图像进行编码并将其发送到数据存储区之前缩小图像。
如果您想保持原始尺寸,另一个选择是使用Google Cloud Storage,具体而言,根据您的情况,使用签名上传网址,您可以在其中创建signed URL,然后将图片上传到其中