5

Я использую jclouds как api для файлов облачных хранилищ Rackspace.Rackspace Cloud Files (с использованием jclouds) - как получить содержимое контейнера

Api позволяет мне создавать контейнеры в разных местах, используя BlobStore.createContainerInLocation

Теперь, имея контейнер, который уже существует, как я могу получить это место?

ответ

0

jclouds не обеспечивает прямой механизм для этого. Вместо этого вы можете позвонить BlobStore.list, сравнить имена контейнеров, а затем потреблять StorageMetadata.getLocation:

for (StorageMetadata resourceMd : blobStore.list()) { 
    if (containerName.equals(resourceMd.getName())) { 
     System.out.println(resourceMd.getLocation().getId()); 
    } 
} 
2

Вы можете перебирать области Rackspace, чтобы получить конечные точки облачных файлов, а затем вы можете запросить каждую конечную точку, чтобы увидеть, существует ли там контейнер. Что-то вроде следующего:

package org.jclouds.examples.rackspace.cloudfiles; 

import static org.jclouds.examples.rackspace.cloudfiles.Constants.PROVIDER; 

import java.io.IOException; import java.util.Set; 

import org.jclouds.ContextBuilder; 
import org.jclouds.openstack.swift.v1.blobstore.RegionScopedBlobStoreContext; 
import org.jclouds.blobstore.BlobStore; 

public class GetRegion{ 
    private final RegionScopedBlobStoreContext ctx; 
    private final String YOUR_CONTAINER = "YOUR_CONTAINER_HERE"; 
    public static void main(String[] args) throws IOException { 
    GetRegion getRegion = new GetRegion(args[0], args[1]); 
    try { 
     getRegion.getRegion(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public GetRegion(String username, String apiKey) { 
    ctx = ContextBuilder.newBuilder(PROVIDER) 
      .credentials(username, apiKey) 
      .buildView(RegionScopedBlobStoreContext.class); 
    } 

    private void getRegion() { 
    Set<String> regions = ctx.configuredRegions(); 
    for(String region:regions){ 
     BlobStore store = ctx.blobStoreInRegion(region); 
     if(store.containerExists(YOUR_CONTAINER)) { 
     System.out.format("Container is in %s region\n", region); 
     } 
    } 
    } 
} 

Для запуска, замените «YOUR_CONTAINER_HERE» с именем контейнера и передать имя пользователя Rackspace и ключ API в качестве аргументов командной строки (в качестве альтернативы, жесткий код их для «арг [ 0] 'и' args [1] ', соответственно).

+0

Этот подход требует один вызов BlobStore.containerExists в регионе. –