2014-10-13 12 views
7

'Klasörler' fikri, Google Cloud Storage'da var olmayan veya farklı türde bir şey olduğunu biliyorum. Ancak, tüm nesneleri silmenin bir yolunu bulmam gerekiyor. 'klasör' veya Java'dan belirli bir önek ile.'Klasördeki tüm dosyaları veya Google Cloud Bucket'deki önek ile Java' dan silme

GcsService'ın bir silme işlevi vardır, ancak bunu söyleyebildiğim kadarıyla sadece 1 GscFilename nesnesi alır ve joker karakterlere önem verilmez (yani, "folderName/**" çalışmadı).

Herhangi bir ipucu?

cevap

7

API yalnızca bir kerede tek bir nesneyi silmeyi destekler. Pek çok HTTP isteğini kullanarak veya birçok silme isteğini toplu olarak uygulayarak çok sayıda silme talebinde bulunabilirsiniz. Joker karakterleri veya benzerlerini kullanarak birden fazla nesneyi silmek için API çağrısı yoktur. Nesnelerin tümünü belirli bir önekle silmek için, nesneleri listelemeniz ve ardından desene uyan her nesne için bir silme araması yapmanız gerekir.

Komut satırı yardımcı programı gsutil, "gs: // bucket/dir/**." Yolunu silmek istediğinizde tam olarak bunu yapar. Bu desenle eşleşen nesnelerin listesini getirir, sonra silme yapar. bunların her biri için çağrı Eğer hızlı bir çözüm gerekiyorsa

, her zaman Java programı exec gsutil'i olabilir İşte

başka vaka herkesin kullanabileceği istediği yukarıdaki cevaba denk gelen koddur..:

public void deleteFolder(String bucket, String folderName) throws CoultNotDeleteFile { 
    try 
    { 
    ListResult list = gcsService.list(bucket, new ListOptions.Builder().setPrefix(folderName).setRecursive(true).build()); 

    while(list.hasNext()) 
    { 
     ListItem item = list.next(); 
     gcsService.delete(new GcsFilename(file.getBucket(), item.getName())); 
    } 
    } 
    catch (IOException e) 
    { 
    //Error handling 
    } 
} 

Nesne listelemesinin sonuç olduğunu unutmayın. Tutarlı, yani bu yaklaşımın, eğer yakın zamanda yaratılmışlarsa, tüm nesneleri yakalamak için garanti edilmediği anlamına gelir.

+0

Tamam, ben bu şekilde yapmak zorunda düşündüm. Çok teşekkürler! – shieldstroy

0

Bunun eski bir soru olduğunu anlıyorum, ancak aynı konuya yeni bir tökezledim ve çözmek için farklı bir yol buldum.

Google Cloud Java Client for Storage sınıfındaki Storage sınıfı, bir önek olarak adlandırılan lekelere sonuçların filtrelenmesi için bir önek ayarlama seçeneği de kabul edebilen, bir kutudaki lekeleri listelemek için bir yöntem içerir. Bir kova verilen bir önek ile tüm dosyaları silerek Örneğin

böyle sağlanabilir:

Storage storage = StorageOptions.getDefaultInstance().getService(); 
Iterable<Blob> blobs = storage.list("bucket_name", Storage.BlobListOption.prefix("prefix")).iterateAll(); 
for (Blob blob : blobs) { 
    blob.delete(Blob.BlobSourceOption.generationMatch()); 
}