Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 适用于 .NET 的 AWS 开发工具包 获取对象

以下任务将引导您使用 .NET 类来检索对象或部分对象,并将其本地保存到文件中。

下载对象

1

创建 AmazonS3 类的实例。

2

执行 AmazonS3.GetObject 方法之一。您需要提供信息,例如存储桶名称、文件路径或流。您可以通过创建 GetObjectRequest 类的实例提供此信息。

3

执行 GetObjectResponse.WriteResponseStreamToFile 方法之一以将流保存为文件。

以下 C# 代码示例演示了上述任务。这些示例将对象保存到桌面上的文件。

Copy
static IAmazonS3 client; using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = client.GetObject(request)) { string dest = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), keyName); if (!File.Exists(dest)) { response.WriteResponseStreamToFile(dest); } } }

您可以通过在请求中指定字节范围来仅读取部分对象,而不是读取整个对象,如以下 C# 代码示例所示。

Copy
GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName, ByteRange = new ByteRange(0, 10) };

在检索对象时,您可以选择通过使用 获取对象 对象并设置相应的请求属性来替换响应标头值 (参阅 ResponseHeaderOverrides),如以下 C# 代码示例所示。您可以使用此功能指示应将此对象下载到文件名不同于对象键名称的文件中。

Copy
GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides(); responseHeaders.CacheControl = "No-cache"; responseHeaders.ContentDisposition = "attachment; filename=testing.txt"; request.ResponseHeaderOverrides = responseHeaders;

以下 C# 代码示例从 Amazon S3 存储桶检索对象。通过该响应,示例将读取使用 GetObjectResponse.ResponseStream 属性的对象数据。该示例还介绍如何使用 GetObjectResponse.Metadata 集合读取对象元数据。如果您检索的对象具有 x-amz-meta-title 元数据,则该代码会打印元数据值。

有关如何创建和测试有效示例的说明,请参阅 运行 Amazon S3 .NET 代码示例

Copy
using System; using System.IO; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class GetObject { static string bucketName = "*** bucket name ***"; static string keyName = "*** object key ***"; static IAmazonS3 client; public static void Main(string[] args) { try { Console.WriteLine("Retrieving (GET) an object"); string data = ReadObjectData(); } catch (AmazonS3Exception s3Exception) { Console.WriteLine(s3Exception.Message, s3Exception.InnerException); } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static string ReadObjectData() { string responseBody = ""; using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = client.GetObject(request)) using (Stream responseStream = response.ResponseStream) using (StreamReader reader = new StreamReader(responseStream)) { string title = response.Metadata["x-amz-meta-title"]; Console.WriteLine("The object's title is {0}", title); responseBody = reader.ReadToEnd(); } } return responseBody; } } }