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 información acerca de cómo configurar y ejecutar ejemplos de código, consulte Introducción al SDK de AWS para .NET en la Guía para desarrolladores del SDK de AWS para .NET.
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); } } } }