subir name descargar carpeta aws archivos amazon-web-services amazon-s3 amazon

amazon-web-services - name - subir archivos a aws s3



¿Cómo cambiar el nombre de archivos y carpetas en Amazon S3? (12)

¿Hay alguna función para cambiar el nombre de archivos y carpetas en Amazon S3? Cualquier sugerencia relacionada también es bienvenida.


Acabo de hacer que esto funcione. Puede utilizar AWS SDK para PHP de esta manera:

use Aws/S3/S3Client; $sourceBucket = ''*** Your Source Bucket Name ***''; $sourceKeyname = ''*** Your Source Object Key ***''; $targetBucket = ''*** Your Target Bucket Name ***''; $targetKeyname = ''*** Your Target Key Name ***''; // Instantiate the client. $s3 = S3Client::factory(); // Copy an object. $s3->copyObject(array( ''Bucket'' => $targetBucket, ''Key'' => $targetKeyname, ''CopySource'' => "{$sourceBucket}/{$sourceKeyname}", ));

http://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingPHP.html


Acabo de probar esto y funciona:

aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>


Así es como lo haces en .NET, usando S3 .NET SDK :

var client = new Amazon.S3.AmazonS3Client(_credentials, _config); client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath); client.DeleteObject(oldBucketName, oldfilepath);

PD: intente utilizar versiones "asincrónicas" de los métodos del cliente siempre que sea posible, aunque no lo haya hecho para facilitar la lectura


Como respondió Naaz, el cambio de nombre directo de s3 no es posible.

He adjuntado un fragmento de código que copiará todos los contenidos

el código está funcionando solo agregue su clave de acceso aws y clave secreta

esto es lo que hice en el código

-> copiar el contenido de la carpeta fuente (elementos secundarios anidados y carpetas) y pegar en la carpeta de destino

-> cuando se completa la copia, elimine la carpeta de origen

package com.bighalf.doc.amazon; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.List; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.CopyObjectRequest; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.model.S3ObjectSummary; public class Test { public static boolean renameAwsFolder(String bucketName,String keyName,String newName) { boolean result = false; try { AmazonS3 s3client = getAmazonS3ClientObject(); List<S3ObjectSummary> fileList = s3client.listObjects(bucketName, keyName).getObjectSummaries(); //some meta data to create empty folders start ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(0); InputStream emptyContent = new ByteArrayInputStream(new byte[0]); //some meta data to create empty folders end //final location is the locaiton where the child folder contents of the existing folder should go String finalLocation = keyName.substring(0,keyName.lastIndexOf(''/'')+1)+newName; for (S3ObjectSummary file : fileList) { String key = file.getKey(); //updating child folder location with the newlocation String destinationKeyName = key.replace(keyName,finalLocation); if(key.charAt(key.length()-1)==''/''){ //if name ends with suffix (/) means its a folders PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, destinationKeyName, emptyContent, metadata); s3client.putObject(putObjectRequest); }else{ //if name doesnot ends with suffix (/) means its a file CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, file.getKey(), bucketName, destinationKeyName); s3client.copyObject(copyObjRequest); } } boolean isFodlerDeleted = deleteFolderFromAws(bucketName, keyName); return isFodlerDeleted; } catch (Exception e) { e.printStackTrace(); } return result; } public static boolean deleteFolderFromAws(String bucketName, String keyName) { boolean result = false; try { AmazonS3 s3client = getAmazonS3ClientObject(); //deleting folder children List<S3ObjectSummary> fileList = s3client.listObjects(bucketName, keyName).getObjectSummaries(); for (S3ObjectSummary file : fileList) { s3client.deleteObject(bucketName, file.getKey()); } //deleting actual passed folder s3client.deleteObject(bucketName, keyName); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public static void main(String[] args) { intializeAmazonObjects(); boolean result = renameAwsFolder(bucketName, keyName, newName); System.out.println(result); } private static AWSCredentials credentials = null; private static AmazonS3 amazonS3Client = null; private static final String ACCESS_KEY = ""; private static final String SECRET_ACCESS_KEY = ""; private static final String bucketName = ""; private static final String keyName = ""; //renaming folder c to x from key name private static final String newName = ""; public static void intializeAmazonObjects() { credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY); amazonS3Client = new AmazonS3Client(credentials); } public static AmazonS3 getAmazonS3ClientObject() { return amazonS3Client; }

}



Esto ahora es posible para Archivos, seleccione el archivo y luego seleccione Más> Cambiar nombre en la GUI.

Para cambiar el nombre de una carpeta, en su lugar tiene que crear una nueva carpeta y seleccionar el contenido de la anterior y copiarla / pegarla (nuevamente debajo de "Más")


No hay forma de cambiar el nombre de una carpeta a través de la GUI, la manera más rápida (y más fácil si le gusta la GUI) de lograr esto es realizar una copia antigua normal. Para lograr esto: crea la nueva carpeta en S3 usando la GUI, ve a tu carpeta anterior, selecciona todo, marca "copiar" y luego navega a la nueva carpeta y elige "pegar". Cuando haya terminado, elimine la carpeta anterior.

Este sencillo método es muy rápido porque se trata de copias de S3 a sí mismo (no es necesario volver a cargarlo ni nada de eso) y también mantiene los permisos y los metadatos de los objetos copiados como es de esperar.


No hay un método directo para cambiar el nombre del archivo en s3. lo que tienes que hacer es copiar el archivo existente con un nuevo nombre (simplemente establece la clave de destino) y eliminar el anterior.


Puede usar la CLI de AWS o el comando s3cmd para cambiar el nombre de los archivos y las carpetas en el depósito de AWS S3.

Usando S3cmd, use la siguiente sintaxis para cambiar el nombre de una carpeta,

s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>

Con AWS CLI, use la siguiente sintaxis para cambiar el nombre de una carpeta,

aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>



S3DirectoryInfo tiene un método MoveTo que moverá un directorio a otro, de modo que el directorio movido se convierta en un subdirectorio del otro directorio con el mismo nombre que originalmente tenía.

El siguiente método de extensión moverá un directorio a otro, es decir, el directorio movido se convertirá en el otro directorio. Lo que realmente hace es crear el nuevo directorio, mover todos los contenidos del antiguo directorio y luego eliminar el anterior.

public static class S3DirectoryInfoExtensions { public static S3DirectoryInfo Move(this S3DirectoryInfo fromDir, S3DirectoryInfo toDir) { if (toDir.Exists) throw new ArgumentException("Destination for Rename operation already exists", "toDir"); toDir.Create(); foreach (var d in fromDir.EnumerateDirectories()) d.MoveTo(toDir); foreach (var f in fromDir.EnumerateFiles()) f.MoveTo(toDir); fromDir.Delete(); return toDir; } }


aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive aws s3 rm s3://source_folder --recursive