The following code examples show how to use CopyObject
.
Action examples are code excerpts from larger programs and must be run in context. You can see this action in context in the following code examples:
- SDK for .NET
-
Note
There's more on GitHub. Find the complete example and learn how to set up and run in the AWS Code Examples Repository
. using System; using System.Threading.Tasks; using Amazon.S3; using Amazon.S3.Model; public class CopyObject { public static async Task Main() { // Specify the AWS Region where your buckets are located if it is // different from the AWS Region of the default user. IAmazonS3 s3Client = new AmazonS3Client(); // Remember to change these values to refer to your Amazon S3 objects. string sourceBucketName = "amzn-s3-demo-bucket1"; string destinationBucketName = "amzn-s3-demo-bucket2"; string sourceObjectKey = "testfile.txt"; string destinationObjectKey = "testfilecopy.txt"; Console.WriteLine($"Copying {sourceObjectKey} from {sourceBucketName} to "); Console.WriteLine($"{destinationBucketName} as {destinationObjectKey}"); var response = await CopyingObjectAsync( s3Client, sourceObjectKey, destinationObjectKey, sourceBucketName, destinationBucketName); if (response.HttpStatusCode == System.Net.HttpStatusCode.OK) { Console.WriteLine("\nCopy complete."); } } /// <summary> /// This method calls the AWS SDK for .NET to copy an /// object from one Amazon S3 bucket to another. /// </summary> /// <param name="client">The Amazon S3 client object.</param> /// <param name="sourceKey">The name of the object to be copied.</param> /// <param name="destinationKey">The name under which to save the copy.</param> /// <param name="sourceBucketName">The name of the Amazon S3 bucket /// where the file is located now.</param> /// <param name="destinationBucketName">The name of the Amazon S3 /// bucket where the copy should be saved.</param> /// <returns>Returns a CopyObjectResponse object with the results from /// the async call.</returns> public static async Task<CopyObjectResponse> CopyingObjectAsync( IAmazonS3 client, string sourceKey, string destinationKey, string sourceBucketName, string destinationBucketName) { var response = new CopyObjectResponse(); try { var request = new CopyObjectRequest { SourceBucket = sourceBucketName, SourceKey = sourceKey, DestinationBucket = destinationBucketName, DestinationKey = destinationKey, }; response = await client.CopyObjectAsync(request); } catch (AmazonS3Exception ex) { Console.WriteLine($"Error copying object: '{ex.Message}'"); } return response; } }
Copy an object using a conditional request.
/// <summary> /// Copies an object from one Amazon S3 bucket to another with a conditional request. /// </summary> /// <param name="sourceKey">The key of the source object to copy.</param> /// <param name="destKey">The key of the destination object.</param> /// <param name="sourceBucket">The source bucket of the object.</param> /// <param name="destBucket">The destination bucket of the object.</param> /// <param name="conditionType">The type of condition to apply, e.g. 'CopySourceIfMatch', 'CopySourceIfNoneMatch', 'CopySourceIfModifiedSince', 'CopySourceIfUnmodifiedSince'.</param> /// <param name="conditionDateValue">The value to use for the condition for dates.</param> /// <param name="etagConditionalValue">The value to use for the condition for etags.</param> /// <returns>True if the conditional copy is successful, False otherwise.</returns> public async Task<bool> CopyObjectConditional(string sourceKey, string destKey, string sourceBucket, string destBucket, S3ConditionType conditionType, DateTime? conditionDateValue = null, string? etagConditionalValue = null) { try { var copyObjectRequest = new CopyObjectRequest { DestinationBucket = destBucket, DestinationKey = destKey, SourceBucket = sourceBucket, SourceKey = sourceKey }; switch (conditionType) { case S3ConditionType.IfMatch: copyObjectRequest.ETagToMatch = etagConditionalValue; break; case S3ConditionType.IfNoneMatch: copyObjectRequest.ETagToNotMatch = etagConditionalValue; break; case S3ConditionType.IfModifiedSince: copyObjectRequest.ModifiedSinceDateUtc = conditionDateValue.GetValueOrDefault(); break; case S3ConditionType.IfUnmodifiedSince: copyObjectRequest.UnmodifiedSinceDateUtc = conditionDateValue.GetValueOrDefault(); break; default: throw new ArgumentOutOfRangeException(nameof(conditionType), conditionType, null); } await _amazonS3.CopyObjectAsync(copyObjectRequest); _logger.LogInformation($"Conditional copy successful for key {destKey} in bucket {destBucket}."); return true; } catch (AmazonS3Exception e) { if (e.ErrorCode == "PreconditionFailed") { _logger.LogError("Conditional copy failed: Precondition failed"); } else if (e.ErrorCode == "304") { _logger.LogError("Conditional copy failed: Object not modified"); } else { _logger.LogError($"Unexpected error: {e.ErrorCode}"); throw; } return false; } }
-
For API details, see CopyObject in AWS SDK for .NET API Reference.
-
For a complete list of AWS SDK developer guides and code examples, see Developing with Amazon S3 using the AWS SDKs. This topic also includes information about getting started and details about previous SDK versions.