public void ListObjects(string bucketName){
var keys = new List<string>();
ListObjectsResponse result = null;
string nextMarker = string.Empty;
var listObjectsRequest = new ListObjectsRequest()
BucketName = bucketName,
Marker = nextMarker,
MaxKeys = 5
result = s3Client.ListObjects(listObjectsRequest);
foreach (var obj in result.S3Objects)
Console.WriteLine(obj.Key);
nextMarker = result.NextMarker;
} while (result.IsTruncated);
Console.WriteLine("List objects of bucket:{0} succeeded ", bucketName);
catch (AmazonS3Exception ex)
Console.WriteLine("Failed with HTTPStatus: {0}; \nErrorCode: {1}; \nErrorMessage: {2}; \nRequestID:{3};",
ex.StatusCode, ex.ErrorCode, ex.Message, ex.RequestId);
catch (Exception ex)
Console.WriteLine("Failed with error info: {0}", ex.Message);
上述代码中的ListObjectsRequest中的可选参数如下所示:
6.2. 判断文件是否存在
您可以使用AmazonS3Client.GetObjectMetadata的返回值来判断文件是否存在:
public bool DoesObjectExist(string bucketNaame,string key){
var response = s3Client.GetObjectMetadata(new GetObjectMetadataRequest(){
BucketName = bucketNaame,
Key = key
return true;
catch (Amazon.S3.AmazonS3Exception ex)
if (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
return false;
return false;
6.3. 删除单个文件
您可以使用AmazonS3Client.DeleteObject删除单个需要删除的文件:
public void DeleteObject(string bucketNaame, string key)
var resp = s3Client.DeleteObject(bucketNaame,key);
Console.WriteLine("StatusCode : {0}", resp.HttpStatusCode);
catch (AmazonS3Exception ex)
Console.WriteLine("Failed with HTTPStatus: {0}; \nErrorCode: {1}; \nErrorMessage: {2}; \nRequestID:{3};",
ex.StatusCode, ex.ErrorCode, ex.Message, ex.RequestId);
catch (Exception ex)
Console.WriteLine("Failed with error info: {0}", ex.Message);
6.4. 删除多个文件
您可以使用AmazonS3Client.DeleteObjects批量删除文件:
public void DeleteObjects(string bucket)
var keys = new List<KeyVersion>();
var listObjectsResult = s3Client.ListObjects(bucket);
foreach (var obj in listObjectsResult.S3Objects)
keys.Add(new KeyVersion(){
Key = obj.Key
keys.Add(new KeyVersion()
Key = "NotExist" //不存在的key
var result = s3Client.DeleteObjects(new DeleteObjectsRequest(){
BucketName = bucket,
Objects = keys,
Quiet=false
Console.WriteLine("Delete objects succeeded");
catch (DeleteObjectsException ex)
var resp = ex.Response;
Console.WriteLine("No. of objects successfully deleted = {0}", resp.DeletedObjects.Count);
Console.WriteLine("No. of objects failed to delete = {0}", resp.DeleteErrors.Count);
foreach (DeleteError deleteError in resp.DeleteErrors)
Console.WriteLine("Error Object Key: {0}\t{1}\t{2}", deleteError.Key, deleteError.Code, deleteError.Message);
foreach (var deleteError in resp.DeletedObjects)
Console.WriteLine("Object Key: {0}", deleteError.Key);
catch (Exception ex)
Console.WriteLine("Failed with error info: {0}", ex.Message);
6.5. 拷贝文件
您可以使用AmazonS3Client.CopyObject拷贝文件:
public void CopyObject(string sourceBucket, string sourceKey, string targetBucket, string targetKey)
var request = new CopyObjectRequest(){
SourceBucket = sourceBucket,
SourceKey = sourceKey,
DestinationBucket = targetBucket,
DestinationKey = targetKey
s3Client.CopyObject(request);
Console.WriteLine("Copy object succeeded");
catch (AmazonS3Exception ex)
Console.WriteLine("Failed with HTTPStatus: {0}; \nErrorCode: {1}; \nErrorMessage: {2}; \nRequestID:{3};",
ex.StatusCode, ex.ErrorCode, ex.Message, ex.RequestId);
catch (Exception ex)
Console.WriteLine("Failed with error info: {0}", ex.Message);
Attention
支持跨桶的文件copy
6.6. 获取文件的文件元信息
您可以使用AmazonS3Client.GetObjectMetadata获取对象的元数据信息:
public void GetObjectMetadata(string bucket, string key)
var objectMetadata = s3Client.GetObjectMetadata(bucket, key);
Console.WriteLine("Get Object Metadata succeeded");
catch (AmazonS3Exception ex)
Console.WriteLine("Failed with HTTPStatus: {0}; \nErrorCode: {1}; \nErrorMessage: {2}; \nRequestID:{3};",
ex.StatusCode, ex.ErrorCode, ex.Message, ex.RequestId);
catch (Exception ex)
Console.WriteLine("Failed with error info: {0}", ex.Message);
6.7. 生成私有对象可下载的URL链接
您可以使用AmazonS3Client.GetPreSignedURL获取对象的下载URL:
public void GetObjectDownloadURL(string bucket, string key){
GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
BucketName = bucket,
Key = key,
Expires = DateTime.Now.AddMinutes(5) //根据实际需要设置过期时间
string urlString = s3Client.GetPreSignedURL(request1);
Console.WriteLine(urlString);
catch (AmazonS3Exception ex)
Console.WriteLine("Failed with HTTPStatus: {0}; \nErrorCode: {1}; \nErrorMessage: {2}; \nRequestID:{3};",
ex.StatusCode, ex.ErrorCode, ex.Message, ex.RequestId);
catch (Exception ex)
Console.WriteLine("Failed with error info: {0}", ex.Message);