log - Agregar carpeta en el cubo de Amazon s3
upload to s3 bucket (12)
A continuación, crea un directorio vacío llamado "mydir1".
A continuación se muestra el código nodejs, debe ser similar para otros idiomas.
El truco es tener una barra inclinada (/) al final del nombre del objeto, como en "mydir1 /", de lo contrario se creará un archivo con el nombre "mydir1".
let AWS = require(''aws-sdk'');
AWS.config.loadFromPath(__dirname + ''//my-aws-config.json'');
let s3 = new AWS.S3();
var params = {
Bucket: "mybucket1",
Key: "mydir1/",
ServerSideEncryption: "AES256" };
s3.putObject(params, function (err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
return;
} else {
console.log(data); // successful response
return;
/*
data = {
ETag: "/"6805f2cfc46c0f04559748bb039d69ae/"",
ServerSideEncryption: "AES256",
VersionId: "Ri.vC6qVlA4dEnjgRV4ZHsHoFIjqEMNt"
}
*/
} });
Fuente: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
Quiero agregar Folder en mi cubo amazon s3 usando la codificación. ¿Puede por favor sugerirme cómo lograr esto?
Como todo el mundo te ha dicho, en AWS S3 no hay "carpetas", estás pensando en ellas incorrectamente. AWS S3 tiene "objetos", estos objetos pueden parecer carpetas pero no son realmente carpetas en el sentido más amplio de la palabra. Si busca crear carpetas en Amazon AWS S3, no encontrará muchos buenos resultados.
Hay una manera de crear "carpetas" en el sentido de que puede crear una estructura de carpetas simuladas en el S3, pero nuevamente, concéntrese en el hecho de que está creando objetos en S3, no en carpetas. Siguiendo con eso, necesitará el comando "put-object" para crear esta estructura de carpeta simulada. Ahora, para usar este comando, necesita las herramientas de CLI de AWS instaladas, vaya aquí Instalación de CLI de AWS para obtener instrucciones para instalarlas.
El comando es este:
aws s3api put-object --bucket your-bucket-name --key path/to/file/yourfile.txt --body yourfile.txt
Ahora, la parte divertida de este comando es que no necesita tener todas las "carpetas" (objetos) creadas antes de ejecutar este comando. Lo que esto significa es que puede tener una "carpeta" (objeto) para contener cosas, pero luego puede usar este comando para crear la estructura de carpetas simuladas dentro de esa "carpeta" (objeto) como mencioné anteriormente. Por ejemplo, tengo una "carpeta" (objeto) llamada "importador" dentro de mi segmento S3, digamos que quiero insertar sample.txt dentro de una estructura de "carpeta" (objeto) del año, mes y luego una muestra " carpeta "(objeto) dentro de todo eso.
Si solo tengo el objeto "importador" dentro de mi categoría, no necesito ingresar de antemano para crear el año, el mes y los objetos de muestra ("carpetas") antes de ejecutar este comando. Puedo ejecutar este comando así:
aws s3api put-object --bucket my-bucket-here --key importer/2016/01/sample/sample.txt --body sample.txt
El comando put-object entrará y creará la ruta que he especificado en el indicador --key. Aquí hay un poco de una joya: incluso si no tiene un archivo para cargar en el S3, aún puede crear objetos ("carpetas") dentro del depósito S3, por ejemplo, creé un script de shell para "crear carpetas" dentro del cubo, al dejar fuera del indicador --body, y no especificar un nombre de archivo, y dejar una barra al final de la ruta provista en --el indicador de tecla, el sistema crea la estructura de carpeta simulada deseada dentro del contenedor S3 sin insertar un archivo en el proceso.
Espero que esto te ayude a entender el sistema un poco mejor.
Nota: una vez que haya creado una estructura de "carpeta", puede usar el comando "sync" del S3 para sincronizar la "carpeta" descendiente con una carpeta en su máquina local, o incluso con otro cubo S3.
Con aws cli , es posible copiar una carpeta completa en un cubo.
aws s3 cp /path/to/folder s3://bucket/path/to/folder --recursive
También existe la opción de sincronizar una carpeta usando aws s3 sync
Con AWS SDK .Net funciona perfectamente, simplemente agregue "/" al final de la carpeta de nombre:
var folderKey = folderName + "/"; //end the folder name with "/"
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);
var request = new PutObjectRequest();
request.WithBucketName(AWSBucket);
request.WithKey(folderKey);
request.WithContentBody(string.Empty);
S3Response response = client.PutObject(request);
A continuación, actualice la consola de AWS y verá la carpeta
En iOS (Objective-C), lo hice de manera siguiente
Puede agregar el código siguiente para crear una carpeta dentro de Amazon s3 bucket programmatically. Esto está funcionando fragmento de código. Cualquier sugerencia Bienvenido.
-(void)createFolder{
AWSS3PutObjectRequest *awsS3PutObjectRequest = [AWSS3PutObjectRequest new];
awsS3PutObjectRequest.key = [NSString stringWithFormat:@"%@/", @"FolderName"];
awsS3PutObjectRequest.bucket = @"Bucket_Name";
AWSS3 *awsS3 = [AWSS3 defaultS3];
[awsS3 putObject:awsS3PutObjectRequest completionHandler:^(AWSS3PutObjectOutput * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"error Creating folder");
}else{
NSLog(@"Folder Creating Sucessful");
}
}];
}
En swift 2.2 puedes crear una carpeta usando
func createFolderWith(Name: String!) {
let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
folderRequest.key = Name + "/"
folderRequest.bucket = "Your Bucket Name"
AWSS3.defaultS3().putObject(folderRequest).continueWithBlock({ (task) -> AnyObject? in
if task.error != nil {
assertionFailure("* * * error: /(task.error?.localizedDescription)")
} else {
print("created /(Name) folder")
}
return nil
})
}
Java con AWS SDK:
No hay carpetas en s3, solo pares clave / valor. La clave puede contener barras (
/
) y eso hará que aparezca como una carpeta en la consola de administración, pero programáticamente no es una carpeta, es un valor de cadena.Si está tratando de estructurar su segmento s3, entonces sus convenciones de nomenclatura (las claves que le da a sus archivos) pueden simplemente seguir patrones normales de directorio, es decir,
folder/subfolder/file.txt
.Al buscar (dependiendo del idioma que esté utilizando), puede buscar a través del prefijo un delimitador. En Java, sería una
listObjects(String storageBucket, String prefix, String delimiter)
allistObjects(String storageBucket, String prefix, String delimiter)
.El
storageBucket
es el nombre de su cubo, elprefix
es la clave que desea buscar, y eldelimiter
se usa para filtrar su búsqueda en función delprefix
.
La gema AWS:S3 rails lo hace solo:
AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)
Creará automáticamente las "carpetas" de teaser
y de images
si aún no existen.
No hay carpetas en Amazon S3. Es solo que la mayoría de las herramientas de navegador S3 disponibles muestran parte del nombre de la tecla separado por barra como una carpeta.
Si realmente lo necesita, puede crear un objeto vacío con la barra al final. por ejemplo, "carpeta /" Se verá como una carpeta si la abre con una herramienta GUI y AWS Console.
Para Swift, creé un método donde pasas una String
para el nombre de la carpeta.
Swift 3:
import AWSS3
func createFolderWith(Name: String!) {
let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
folderRequest.key = Name + "/"
folderRequest.bucket = bucket
AWSS3.default().putObject(folderRequest).continue({ (task) -> Any? in
if task.error != nil {
assertionFailure("* * * error: /(task.error?.localizedDescription)")
} else {
print("created /(Name) folder")
}
return nil
})
}
Entonces simplemente llama
createFolderWith(Name:"newFolder")
Puede seleccionar el idioma de su elección del AWS SDK disponible
Alternativamente, puede probar las bibliotecas de minio client disponibles en Python , Go , .Net , Java , Javascript para su entorno de desarrollo de aplicaciones, tiene un directorio de ejemplo con todas las operaciones básicas enumeradas.
Descargo de responsabilidad: yo trabajo para Minio
para crear un directorio dentro del cubo s3 y copiar contenidos dentro, es bastante simple.
El comando S3 se puede utilizar: aws s3 cp abc / def.txt s3: // mybucket / abc /
Nota: / es imprescindible que haga el directorio; de lo contrario, se convertirá en un archivo en s3.