11

Google Big QueryからGoogle Storageにデータを移動するプロセスを自動化することに成功しました。今私はGoogle Storageから自宅の環境に自動的にデータをダウンロードする必要があります。Javaを使用してGoogleストレージからファイルをダウンロード

通常のHTTPリクエストを実行しようとしていますが、前に許可しています。だから私のHTTPリクエストは

HttpRequestFactory requestFactory = HTTP_TRANSPORT.createRequestFactory(authorize()); 
    GenericUrl url = new GenericUrl(uri); 
    HttpRequest request = requestFactory.buildGetRequest(url); 
    HttpResponse response = request.execute(); 
    String content = response.parseAsString(); 

ですそして、私の認証コードは

以下の定数が

  1. CREDENTIALS_DIRECTORYある
    /** Authorizes the installed application to access user's protected data. */ 
        private static Credential authorize() throws Exception 
        { 
         HttpTransport httpTransport = new NetHttpTransport(); 
         JsonFactory jsonFactory = new JacksonFactory(); 
    
         // load client secrets 
         GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, 
           new InputStreamReader(BigQueryConsumer.class.getResourceAsStream("/secret.json"))); 
    
         // This creates the credentials datastore at ~/.oauth-credentials/${credentialDatastore} 
         FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File(System.getProperty("user.home") + "/" + CREDENTIALS_DIRECTORY)); 
    
         // set up authorization code flow 
         GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
           httpTransport, JSON_FACTORY, clientSecrets, 
           SCOPES).setDataStoreFactory(fileDataStoreFactory) 
           .build(); 
         // authorize 
         return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); 
        } 
    

    です: ".oauth-資格証明書"

  2. JSON_FACTORY:JacksonFactory。 getDefaultInstance()
  3. スコープ:文字列のリスト"https://www.googleapis.com/auth/devstorage.full_control"
  4. HTTP_TRANSPORT:新しいNetHttpTransport()

Iは、認証/承認プロセスの間に何をしないのですか?私は得ている

Exception in thread "main" com.google.api.client.http.HttpResponseException: 401 Unauthorized 
<HTML> 
<HEAD> 
<TITLE>Unauthorized</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Unauthorized</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 
+1

あなたも試してみたい場合がありますのようなものは、[ 'のgcloudは-java'](http://googlecloudplatform.github.io/gcloud-java/)、ここでは(HTTPSいくつかの[サンプルコード]です。 //github.com/GoogleCloudPlatform/gcloud-java/blob/master/gcloud-java-examples/src/main/java/com/google/gcloud/examples/StorageExample.java)。 –

答えて

5

答えを探している他の人のために。アプリケーションのデフォルトの資格情報を使用するためには、いくつかの手順を実行する必要があります。以下の手順に従うか、linkをご覧ください。

  1. まず、物事は最初:あなたがSDKからコマンドを実行できることを確認し、GoogleのクラウドストレージSDK
  2. をインストールします。 Pythonがインストールされていない場合は、Python 2.7以上をインストールする必要があります。また、pyopensslをインストールする必要があります。
  3. gcloud auth activate-service-account [サービスアカウント電子メール]を実行して、 --key-fil e [.p12ファイル](角括弧内の値を編集します)。これを実行すると、サービスアカウントを有効にしたことを伝えるメッセージが表示されます
  4. GOOGLE_APPLICATION_CREDENTIALSをシークレットのJSONパスに設定すると、SDKから環境変数を設定する必要があります)開発者コンソールから CLOUDSDK_PYTHON_SITEPACKAGES 1に、また、コマンドはシステム変数を設定するには、プロジェクト

...

 
set GOOGLE_APPLICATION_CREDENTIALS "secret.json path" 
set CLOUDSDK_PYTHON_SITEPACKAGES 1 
gcloud config set project "your project name" 

あなたは、認証、および自分自身を認可した後の設定環境を適切に設定しているので、アプリケーションのデフォルトの資格情報の使用を開始できます。もし成功したセットアップご使用の環境、あなたはその後、すなわち、ちょうど

 
     GoogleCredential credential = GoogleCredential.getApplicationDefault(); 

     if (credential.createScopedRequired()) { 
      credential = credential.createScoped(StorageScopes.all()); 
     } 

     HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
     storageService = new Storage.Builder(httpTransport, jsonFactory, credential) 
       .setApplicationName(applicationName).build(); 

し、Googleストレージバケットからオブジェクトを取得するためにHTTP GETを使用して既定の資格情報を認証してもらうことができます

 
// Set up and execute a Google Cloud Storage request. 
       String uri = "https://storage.googleapis.com/" + URLEncoder.encode("[your bucket name here]", "UTF-8") + "/" + googleStorageFileName + "/" + fileName; 

       httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
       HttpRequestFactory requestFactory = httpTransport.createRequestFactory(
         credential); 
       GenericUrl url = new GenericUrl(uri); 

       HttpRequest request = requestFactory.buildGetRequest(url); 
       HttpResponse response = request.execute(); 
       String content = response.parseAsString(); 
       BufferedWriter writer = new BufferedWriter(new FileWriter(pathToSave + googleStorageFileName)); 
       writer.write(content); 
関連する問題