2017-02-04 23 views
1

私はApp Engineアプリケーションを持っています。 Cloud Storageを使用して、ユーザーがアップロードしたファイルを保存したいGoogle Appengine Cloud Storage

すべてのアプリケーションエンジンアプリケーションに付属する単一のフリーバケットにアクセスするための簡単な認証方法を知りたい。

アプリケーションだけでクラウドストレージと通信し、クラウドストレージとのやりとりを行う必要はありません。すべてのファイルは同じフォルダに置くことができ、App EngineのJVMだけがアクセスできる必要があります。

Oauth2などを経由せずに、簡単な認証方法がありますか?可能であれば、シンプルなサーバー間の種類のアクセス。

編集:これはこれと同じですか?

gcloud beta auth application-default login 

編集2:のgcloudのための上記のデフォルトの認証設定をしようとしました。それと同じ例外がスローされます。

com.google.cloud.storage.StorageException: Invalid Credentials 
私が使用しています

テストコード:

private static Storage storage = null; 
static { 
     storage = StorageOptions.getDefaultInstance().getService(); 
    } 

@Override 
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
    PrintWriter out = resp.getWriter(); 
    out.println("Hello, world"); 

    testCloudStorage(); 
} 

private void testCloudStorage() throws IOException{ 
    ByteArrayInputStream baIs = new ByteArrayInputStream("TEST FILE CONTENT".getBytes()); 
    uploadFile("test-content.txt", baIs, "xyzabc.appspot.com"); 
} 

/** 
* Uploads a file to Google Cloud Storage to the bucket specified in the BUCKET_NAME 
* environment variable, appending a timestamp to end of the uploaded filename. 
*/ 
public String uploadFile(String fileName, InputStream inputStream, final String bucketName) throws IOException { 
    DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS"); 
    DateTime dt = DateTime.now(DateTimeZone.UTC); 
    String dtString = dt.toString(dtf); 
    final String extendedFileName = fileName + dtString; 

    // the inputstream is closed by default, so we don't need to close it here 
    BlobInfo blobInfo = 
     storage.create(
      BlobInfo 
       .newBuilder(bucketName, extendedFileName) 
       // Modify access list to allow all users with link to read file 
       .setAcl(new ArrayList<>(Arrays.asList(Acl.of(Acl.User.ofAllUsers(), Role.READER)))) 
       .build(), 
      inputStream); 
    // return the public download link 
    return blobInfo.getMediaLink(); 
} 

編集3:これらは私が続くの手順は以下のとおりです。

  1. 私は基本的な作業JSPのサンプルアプリケーションを持っている - の両方devserverデプロイされたバージョンは正常に動作しています
  2. データストアが動作しています - 挿入/更新/削除
  3. は私がのgcloud SDKをインストールし、initをやって
+0

公式ドキュメントに基づいて試したことをGoogleに見せてください。 –

+0

@ZigMandel私はすでにアプリケーションエンジンで動作しているJSPアプリケーションを持っています。私は、クラウドストレージをテストするためのテストサーブレットを作成しました。私はちょうどテストファイルに数バイトを書きたいと思う。今質問にサーブレットコードを追加しました。 – Teddy

答えて

1

AppEngineのプロジェクトは、すでにそれぞれのバケットで認証され、デフォルトの認証を設定するためのthis tutorialを追っthis tutorial

  • 以下のクラウドストレージのためのサンプルコードを追加しました。バケットがhttps://cloud.google.com/appengine/docs/java/googlecloudstorageclient/setting-up-cloud-storageとして作成されると、追加の認証は必要ありません。

    これらのドキュメントまたはブロブストアhttps://cloud.google.com/appengine/docs/java/blobstore/に従ってバケットを使用できます。

  • +0

    私は最初のリンクを通過しました。問題はローカル展開からのアクセスである可能性があります。 mvn appengine:devserverこのフラグをどこに追加できますか? --default_gcs_bucket_name [BUCKET_NAME] – Teddy

    +0

    ありがとう!クラウドにデプロイすると、アクセスは自動的に実行されます。問題は開発環境だけにあります。 – Teddy

    +0

    私はこれを試しました...しかし、それも動作しませんでした:mvn appengine:devserver -Ddefault_gcs_bucket_name = abcxyz.appsopt.com – Teddy

    関連する問題