2017-04-12 5 views
1

Ich habe diesen Code geschriebentesten, ob Google Cloud Storage Bucket existiert?

private void doesBucketExist(String bucketName) { 
    try { 
     GoogleCredential credential = myUtil.getCredential(); 
     JsonFactory jsonFactory = new JacksonFactory(); 
     HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport(); 
     Storage.Builder storageBilder = new Storage.Builder(transport, jsonFactory, credential); 
     Storage storage = storageBilder.build(); 
     Objects objects = storage.objects(); 
     List listObjects = objects.list(bucketName); 
     if (listObjects != null && listObjects.getBucket().equalsIgnoreCase(bucketName)) { 
      System.out.println("Bucket exist"); 
     } else { 
      System.out.println("Bucket does not exist"); 
     } 

    } catch (Exception e) { 
     throw e; 
    } 
} 

Es gibt listObjects auch wenn ich so bekomme ich Bucket exist einen nicht existierte Bucket-Namen übergeben.

Ich habe this gesehen aber konnte das nicht in meinem Code verwenden, da storage von anderem Paket von ist, was ich in meinem Programm verwende.

Wie kann ich sicherstellen, dass der angegebene Bucket existiert oder nicht?

+0

Woher wissen Sie, dass der Bucket-Name, den Sie übergeben, nicht existiert? Hast du versucht, einen Bucket mit dem Namen in der Dev-Konsole zu erstellen und es ist verwendbar? Bitte beachten Sie, dass der Bucket-Namespace global und öffentlich sichtbar ist, so dass Sie nicht wissen, ob er existiert oder nicht: p –

+0

ja, getestet mit meinem eigenen Namen mit Zufallszahl als Name des Buckets und es gibt immer noch dasselbe, als ob es bereits existierte. – Extreme

+0

Können Sie versuchen, einen Bucket mit dem Namen (z. B. Ihren eigenen Namen mit Zufallszahlen) in der Developers Console zu erstellen, um zu sehen, ob es noch existierte oder nicht? –

Antwort

0

Das Auflisten oder Abrufen des Buckets haben beide Probleme, wenn Sie keinen Zugriff auf den Bucket haben. Je nachdem, ob der Bucket einer anderen Person gehört, erhalten Sie möglicherweise 404 oder 403. Außerdem gibt es keine Garantie dafür, dass die Überprüfung, ob ein Bucket mit einer dieser Methoden vorhanden ist und später versucht wird, zu erstellen, erfolgreich ist, da jemand den Bucket zwischen den beiden Aufrufen erstellen kann.

Stattdessen sollten Sie versuchen, den Bucket zu erstellen und nach dem zurückgegebenen Fehler zu suchen, um zu überprüfen, ob ein Bucket vorhanden ist. Entweder wird es mit einer erfolgreichen HTTP-Antwort gelingen oder es wird mit einem Fehler 409 fehlschlagen, der anzeigt, dass der Bucket bereits existiert. Beachten Sie, dass Sie immer noch auf 5xx-Fehlercodes versuchen sollten.

+0

Ich schreibe diesen Code, um den Gesundheitscheck für Google-Buckets zu testen. Ich muss den http-Response-Code zurückgeben. Und ich verwende 'com.google.api.services.storage'. Wie kann ich in diesem Fall testen? – Extreme

Verwandte Themen