2017-08-23 6 views
0

Dans le code ci-dessous, je prends un seau d'entrée et un blob ainsi qu'un seau de sortie et un blob. Le code établit les informations d'identification du compte de service pour le blob dans le compartiment d'entrée via la méthode setCredentials. Toutefois, il n'y a pas d'étape en miroir dans la méthode copyTo pour le compartiment de sortie.Est-il possible de fournir des informations d'identification pour le Google Cloud Bucket cible lors de la copie dans l'API Java?

def copy(inBucketName: String, 
      inBlobName: String, 
      outBucketName: String, 
      outBlobName: String) = { 

    val storage = StorageOptions.newBuilder 
     .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("key.json"))) 
     .build 
     .getService 
    val blobId = BlobId.of(inBucketName, inBlobName) 
    val blob = storage.get(blobId) 
    if (blob != null) { 
     val copyWriter = blob.copyTo(outBucketName, outBlobName) 
     val copiedBlob = copyWriter.getResult() 
    } 
    } 

Je crains que cela entraînera des problèmes d'authentification à l'avenir si chaque seau a des lettres de créance de service. En regardant l'API blob.copyTo(), je peux également passer un BlobSourceOptoin object: public CopyWriter copyTo(String targetBucket, String targetBlob, BlobSourceOption... options). Cependant, je ne vois nulle part dans BlobSourceOption où je pourrais attribuer des informations d'identification. Cette attribution d'informations d'identification pour le compartiment cible est-elle nécessaire? Et si oui, existe-t-il un moyen standard de les définir?

Répondre

0

A travaillé avec l'extrait ci-dessous. Credentials est une chaîne JSON d'informations d'identification.

val storage = StorageOptions.newBuilder 
     .setCredentials(
     ServiceAccountCredentials.fromStream(
      new FileInputStream(credentials))) 
     .build 
     .getService