2016-04-02 12 views
1

Google Apps EngineエンドポイントバックエンドでAndroidを使用してデータストアにデータを保存しています。 今、私はユーザーの画像を追加して保存したいと思います。Android、App Engine +データストアでプロフィール画像を保存するのに最適な方法

  1. は、エンドポイントからのAPIとコールクラウドストレージ内の塊を使用して新しいエンドポイントを作成:Googleのクラウドストレージを統合するための最良の方法は何ですか? アンドロイド - > - > App Engineのエンドポイント - > Googleクラウドストレージ Googleのクラウドストレージ - > App Engineのエンドポイント - > - > Androidの

  2. 直接エンドポイントなしにAndroidデバイスから、Googleのクラウドストレージを呼びますか? Android - > - > Google Cloud Storage

  3. もっと良い選択肢はありますか?

ありがとう!

答えて

1

あなたのオプションあなたの画像は、1メガバイトの下にあった場合には、base64でエンコードされた文字列のデータストアの最大サイズは

あなたのオプション2 I(あなたはエンドポイントメソッドに渡すどうなるかである)であるため、1のみ動作しますサービスアカウントの鍵をクライアントのGCSに直接格納することになり、安全ではない(あなたが気にしない限り)ことをお勧めしません。

オプション3は、私がやったことです:

私はsigned urlを生成エンドポイントメソッドを持っている(またはあなたがresumable urlを使用することができます)。署名されたURLは期限切れで期限切れです。オブジェクト名とバケットは、署名されたURLに指定されています。 Androidで私のエンドポイントメソッドを呼び出して、署名されたURLを取得し、HttpURLConnectionを使ってGCSに画像をアップロードします。

私のように、あなたのオブジェクトがGCSにアップロードされるときには、おそらくコールバックメソッドが必要になります。これはもう少し複雑ですが、Endpointsプロジェクトでサーブレットを作成してそれに応じて処理する必要があります。ドキュメントはObject Change Notificationのために非常に役に立ちます。

+0

オプション1では、データストアに保存したくありませんでした。私は、エンドポイントからのバイナリイメージデータをクラウドストレージに直接格納することができると考えました。 Cient(Android)は、自分のアプリケーションのエンドポイントを呼び出して、データをサーバーにアップロードします。その後、エンドポイントはGCSバケットにデータをアップロードします。 – SmilingM

+0

オプションに3: どのようにクライアントからサーバーにデータを転送しますか?クライアントまたはエンドポイントから署名されたURLを取得しますか? 画像プロフィールは、アップローダの友人であるすべてのユーザーから読めるようにする必要があります。署名されたURLはそのケースのために行く方法ですか? – SmilingM

+0

私のシナリオは次のとおりです: アプリの各ユーザーにアカウントがあります。アカウントデータはデータストアに保存されます。ユーザーはプロフィール画像をアップロードすることができます。画像はGCSに保存する必要があります。 アップロードは認証のためにエンドポイントを通過する必要があります。 ダウンロードの場合、URLはavailbaleである必要があります。そのため、エンドポイントから画像をダウンロードしないでください。 URLは、アプリでアップローダーに接続されている各ユーザーが永遠にアクセスできる必要があります。 – SmilingM

関連する問題