在AmazonS3 Bucket内部处理文件夹(c#)

我想将一个文件夹(包含其中的所有现有文件)复制到AmazonS3的同一个Bucket中的另一个文件夹中。

我可以复制一个对象,但我需要的是将包含所有文件的文件夹复制到另一个文件夹中。

以下是在AmazonS3 Bucket中复制文件夹的示例,这对我有用。 有关详细信息,请查看此链接

public bool CopyFolderInsideS3Bucket(string source, string destination) { var strippedSource = source; var strippedDestination = destination; // process source if (strippedSource.StartsWith("/")) strippedSource = strippedSource.Substring(1); if (strippedSource.EndsWith("/")) strippedSource = source.Substring(0, strippedSource.Length - 1); var sourceParts = strippedSource.Split('/'); var sourceBucket = sourceParts[0]; var sourcePrefix = new StringBuilder(); for (var i = 1; i < sourceParts.Length; i++) { sourcePrefix.Append(sourceParts[i]); sourcePrefix.Append("/"); } // process destination if (strippedDestination.StartsWith("/")) strippedDestination = destination.Substring(1); if (strippedDestination.EndsWith("/")) strippedDestination = destination.Substring(0, strippedDestination.Length - 1); var destinationParts = strippedDestination.Split('/'); var destinationBucket = destinationParts[0]; var destinationPrefix = new StringBuilder(); for (var i = 1; i < destinationParts.Length; i++) { destinationPrefix.Append(destinationParts[i]); destinationPrefix.Append("/"); } var listObjectsResult = client.ListObjects(new ListObjectsRequest(){ BucketName = sourceBucket, Prefix = sourcePrefix.ToString(), Delimiter = "/"}); // copy each file foreach (var file in listObjectsResult.S3Objects) { var request = new CopyObjectRequest(); request.SourceBucket = Settings.BucketName; request.SourceKey = file.Key; request.DestinationBucket = destinationBucket; request.DestinationKey = destinationPrefix + file.Key.Substring(sourcePrefix.Length); request.CannedACL = S3CannedACL.PublicRead; var response = (CopyObjectResponse)client.CopyObject(request); } // copy subfolders foreach (var folder in listObjectsResult.CommonPrefixes) { var actualFolder = folder.Substring(sourcePrefix.Length); actualFolder = actualFolder.Substring(0, actualFolder.Length - 1); CopyFolderInsideS3Bucket(strippedSource + "/" + actualFolder, strippedDestination + "/" + actualFolder); } return true; } 

您可以在亚马逊版本3.1.5 .net 3.5中使用S3DirectoryInfo类此类copyTo方法。

我使用以下示例C#代码从NTFS文件路径复制到带有C#.net 3.5和amazon版本3.1.5的AmazonS3:

  BasicAWSCredentials basicCredentials = new BasicAWSCredentials("your access key", "your secret key"); AmazonS3Config configurationClient = new AmazonS3Config(); configurationClient.RegionEndpoint = RegionEndpoint.EUCentral1; try { using (AmazonS3Client clientConnection = new AmazonS3Client(basicCredentials, configurationClient)) { S3DirectoryInfo source = new S3DirectoryInfo(clientConnection, "sourcebucketname", "sourcefolderkey"); S3DirectoryInfo target = new S3DirectoryInfo(clientConnection, "sourcebucketname", "destinationfolderkey"); source.CopyTo(target); } } catch(Exception ex) { }