高レベルの .NET TransferUtility クラスを使用してディレクトリをアップロードする - Amazon Simple Storage Service

高レベルの .NET TransferUtility クラスを使用してディレクトリをアップロードする

ディレクトリ全体をアップロードするには、TransferUtility クラスを使用できます。デフォルトでは、API でアップロードされるのは、指定したディレクトリのルートにあるファイルのみです。ただし、すべてのサブディレクトリでファイルを再帰的にアップロードするように指定できます。

フィルタ基準に基づいて指定したディレクトリのファイルを選択するには、フィルタ式を指定します。例えば、ディレクトリから .pdf ファイルのみをアップロードするには、"*.pdf" フィルタ式を指定します。

ディレクトリからファイルをアップロードする場合は、結果のオブジェクトのキー名を指定しません。キー名は、元のファイルパスを使用して Amazon S3 で作成されます。例えば、以下の構造の c:\myfolder ディレクトリがあるとします。

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

このディレクトリをアップロードすると、Amazon S3 では次のキー名が使用されます。

a.txt b.pdf media/An.mp3

以下の C# コード例では、ディレクトリを Amazon S3 バケットにアップロードしています。さまざまな TransferUtility.UploadDirectory オーバーロードを使用してディレクトリをアップロードする方法を示します。後続のアップロード呼び出しが行われるたびに、前のアップロードが置き換えられます。作業サンプルを作成およびテストする方法については、Amazon S3 .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); } } } }