【问题标题】:Best way to store profile images with Android, App engine + datastore使用 Android、应用引擎 + 数据存储存储个人资料图像的最佳方式
【发布时间】:2016-04-02 11:01:31
【问题描述】:

我正在使用带有谷歌应用引擎端点的 Android 后端,通过数据存储存储数据。 现在我想添加和存储用户图像。集成 Google 云存储的最佳方式是什么:

  1. 在 api 中创建一个带有 blob 的新端点并从端点调用云存储? Android -->--> App Engine Endpoint --> 谷歌云存储 谷歌云存储 --> App Engine 端点 --> -->Android

  2. 直接从没有端点的安卓设备调用谷歌云存储? Android --> --> 谷歌云存储

  3. 更好的选择?

谢谢!

【问题讨论】:

    标签: android google-app-engine google-cloud-storage


    【解决方案1】:

    您的选项 1 仅在您的图像小于 1MB 时才有效,因为这是数据存储区中 base64 编码字符串的最大大小(您将传递给端点方法)

    我不推荐您的选项 2,因为那样您将直接在客户端中将服务帐户密钥存储到 GCS,这不安全(除非您不在乎)。

    选项 3 是我所做的:

    我有一个 Endpoints 方法可以生成 signed url(或者您可以使用 resumable url)。签名的 url 已计时并过期。对象名称和存储桶在签名的 url 中指定。我在 Android 中调用我的端点方法来获取签名的 url 并使用 HttpURLConnection 将图像上传到 GCS。

    像我一样,当您的对象上传到 GCS 时,您可能需要一个回调方法。这有点复杂,但您需要在 Endpoints 项目中创建一个 servlet 并进行相应处理。文档对Object Change Notification很有帮助。

    【讨论】:

    • 使用选项 1 我不想将其存储在数据存储中。我认为可以将来自端点的二进制图像数据直接存储在云存储中。 Cient (Android) 调用我的应用程序的端点将数据上传到服务器。然后端点将数据上传到 GCS 存储桶。
    • 对于您的选项 3:您如何将数据从客户端传输到服务器?使用来自客户端或通过端点的签名 URL?上传者朋友的每个用户都应该可以读取图像配置文件。签名 URL 是否适合这种情况?
    • 我的场景如下:app的每个用户都有一个账号。帐户数据存储在数据存储中。用户现在应该可以上传个人资料图片。图像应存储在 GCS 上。由于身份验证,上传应该通过端点。对于下载,应该提供一个 url,因此不得通过端点下载图像。在我的应用中连接到上传器的每个用户都应该可以永久访问该 URL。
    • 端点方法中的二进制参数是否有 1 MB 的限制?在 POST 请求中使用序列化对象作为参数应该像这样工作: public class Image implements Serializable { private byte[] data;公共图像(){超级(); } public byte[] getData() { 返回数据; } public void setData(byte[] data) { this.data = data; } } mehtod: @ApiMethod(name = "endpoint.uploadImage", httpMethod = HttpMethod.POST ) public boolean uploadImage(User user, Image image) throws OAuthRequestException { ... }
    • 只是想在这里插话,Cloud Platform 上的文档是开始了解解决方案可能性的好地方,您还可以找到大量Cloud Platform github account 上的示例。
    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多