2012-07-15 18 views
17

Estoy familiarizado con AWS Java SDK, también traté de buscar el Javadoc correspondiente, pero no pude darme cuenta de cómo creo un subdirectorio, es decir, un directorio objeto dentro de un cubo, y cómo puedo cargar archivos en él.Amazon Web Services (AWS) S3 Java crear un subdirectorio (objeto)

Supongamos bucketName y dirName corresponden al cubo (con permiso pública) y un nuevo directorio (objeto) que necesita ser creada dentro de la cubeta (es decir bucketName/dirName /)

He intentado el siguiente ya existente:

AmazonS3Client s3 = new AmazonS3Client(
    new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)); 
s3.createBucket(bucketName + "/" + dirName); //throws exception 

que arroja una excepción en la segunda línea.

Un fragmento corto que crea un subdirectorio y carga archivos será muy apreciado.

Respuesta

29

No hay "subdirectorios" en S3. Hay cubos y hay llaves dentro de los cubos.

Puede emular directorios tradicionales utilizando búsquedas de prefijos. Por ejemplo, puede almacenar las claves siguientes en un cubo:

foo/bar1 
foo/bar2 
foo/bar3 
blah/baz1 
blah/baz2 

y luego hacer una búsqueda de prefijo para foo/ y que se pondrá en:

foo/bar1 
foo/bar2 
foo/bar3 

Ver AmazonS3.listObjects para más detalles.


Actualización: Asumiendo que ya tiene un depósito existente, la llave debajo de ese cubo contendría el /:

s3.putObject("someBucket", "foo/bar1", file1); 
s3.putObject("someBucket", "foo/bar2", file2); 
... 

A continuación, puede enumerar todas las claves que empiezan con foo/:

ObjectListing listing = s3.listObjects("someBucket", "foo/"); 
+0

Gracias por su respuesta, podría complacer a proporcionar un fragmento de código corto? Como ves en mi publicación, he intentado crear algo como 'foo/bar' pero arroja una excepción. – MrRoth

+0

@MrRoth: ver mi actualización. – casablanca

18

S3 no ve los directorios de la forma tradicional en que lo hacemos en nuestros sistemas operativos. Aquí es cómo se puede crear un directorio:

public static void createFolder(String bucketName, String folderName, AmazonS3 client) { 
    // create meta-data for your folder and set content-length to 0 
    ObjectMetadata metadata = new ObjectMetadata(); 
    metadata.setContentLength(0); 

    // create empty content 
    InputStream emptyContent = new ByteArrayInputStream(new byte[0]); 

    // create a PutObjectRequest passing the folder name suffixed by/
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, 
       folderName + SUFFIX, emptyContent, metadata); 

    // send request to S3 to create folder 
    client.putObject(putObjectRequest); 
} 

como Casablanca ya se dijo que se puede cargar archivos en directorios como estos:

s3.putObject("someBucket", "foo/bar1", file1); 

leer todo el tutorial here para los detalles, y lo más importante es usted encontrará información sobre cómo eliminar los directorios.

+1

¡Funcionó como un encanto! – SexyBeast

0

Si desea crear la carpeta, entonces tienes que utilizar el comando ponga utilizando siguientes teclas para crear carpeta1 en:

en la raíz de la cuchara -> carpeta1/folder1_ $ carpeta $

en carpeta2 ruta/carpeta3/-> carpeta2/carpeta3/carpeta1/folder1_ $ carpeta $

es siempre all_previous_folders/nomCarpeta/folderName_ $ carpeta $

Cuestiones relacionadas