Hochladen eines Verzeichnisses mit der High-Level-.NET-Klasse TransferUtility - Amazon Simple Storage Service

Hochladen eines Verzeichnisses mit der High-Level-.NET-Klasse TransferUtility

Mit der Klasse TransferUtility können Sie ein gesamtes Verzeichnis hochladen. Standardmäßig lädt die API nur die Dateien im Stammverzeichnis des angegebenen Verzeichnisses hoch. Sie können jedoch festlegen, dass die Dateien in allen Unterverzeichnissen rekursiv hochgeladen werden sollen.

Um Dateien im angegebenen Verzeichnis basierend auf Filterkriterien anzugeben, geben Sie Filterausdrücke an. Wenn Sie z. B. nur die .pdf-Dateien aus einem Verzeichnis hochladen möchten, geben Sie den Filterausdruck "*.pdf" ein.

Wenn Sie Dateien aus einem Verzeichnis hochladen, geben Sie nicht die Schlüsselnamen der resultierenden Objekte an. Amazon S3 setzt die Schlüsselnamen aus dem Original-Dateipfad zusammen. Angenommen, ein Verzeichnis mit dem Namen c:\myfolder besitzt die folgende Verzeichnisstruktur:

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

Wenn Sie dieses Verzeichnis hochladen, verwendet Amazon S3 die folgenden Schlüsselnamen:

a.txt b.pdf media/An.mp3

Im folgenden C#-Beispiel wird ein Verzeichnis in einen Amazon S3 Bucket hochgeladen. Es veranschaulicht, wie Sie zahlreiche TransferUtility.UploadDirectory-Überladungen zum Hochladen des Verzeichnisses verwenden. Jeder nachfolgende Aufruf zum Hochladen ersetzt den vorherigen Upload. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für 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); } } } }