Carga de un directorio utilizando la clase TransferUtility de .NET de alto nivel - Amazon Simple Storage Service

Carga de un directorio utilizando la clase TransferUtility de .NET de alto nivel

Puede utilizar la clase TransferUtility para cargar todo un directorio. De forma predeterminada, la API solo carga los archivos en la raíz del directorio especificado. Sin embargo, puede especificar que se carguen los archivos de forma recursiva en todos los subdirectorios.

Puede especificar expresiones de filtrado para seleccionar archivos en el directorio especificado según algunos criterios de filtrado. Por ejemplo, para cargar solo archivos .pdf desde un directorio, especifique la expresión de filtrado "*.pdf".

Cuando carga archivos desde un directorio, no puede especificar los nombres de clave de los objetos resultantes. Amazon S3 construye los nombres de clave usando la ruta del archivo original. Por ejemplo, suponga que tiene un directorio llamado c:\myfolder con la siguiente estructura:

C:\myfolder \a.txt \b.pdf \media\ An.mp3

Cuando carga este directorio, Amazon S3 utiliza los siguientes nombres de clave:

a.txt b.pdf media/An.mp3

En el siguiente ejemplo de código C# se carga un directorio a un bucket de Amazon S3. Muestra cómo utilizar varias sobrecargas TransferUtility.UploadDirectory para cargar el directorio. Cada llamada sucesiva de carga reemplaza la carga anterior. Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Transfer; using System; using System.IO; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class UploadDirMPUHighLevelAPITest { private const string existingBucketName = "*** bucket name ***"; private const string directoryPath = @"*** directory path ***"; // The example uploads only .txt files. private const string wildCard = "*.txt"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; static void Main() { s3Client = new AmazonS3Client(bucketRegion); UploadDirAsync().Wait(); } private static async Task UploadDirAsync() { try { var directoryTransferUtility = new TransferUtility(s3Client); // 1. Upload a directory. await directoryTransferUtility.UploadDirectoryAsync(directoryPath, existingBucketName); Console.WriteLine("Upload statement 1 completed"); // 2. Upload only the .txt files from a directory // and search recursively. await directoryTransferUtility.UploadDirectoryAsync( directoryPath, existingBucketName, wildCard, SearchOption.AllDirectories); Console.WriteLine("Upload statement 2 completed"); // 3. The same as Step 2 and some optional configuration. // Search recursively for .txt files to upload. var request = new TransferUtilityUploadDirectoryRequest { BucketName = existingBucketName, Directory = directoryPath, SearchOption = SearchOption.AllDirectories, SearchPattern = wildCard }; await directoryTransferUtility.UploadDirectoryAsync(request); Console.WriteLine("Upload statement 3 completed"); } catch (AmazonS3Exception e) { Console.WriteLine( "Error encountered ***. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine( "Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }