Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

当下载某个对象时,您将获得该对象的所有元数据以及从中读取内容的流。您应该尽快读取流的内容,因为数据直接源自 Amazon S3,在您读取所有数据或关闭输入流之前,您的网络连接将保持打开状态。您通过执行以下操作来获取对象:

  • 通过在请求中提供存储桶名称和对象键来执行 getObject 方法。

  • 执行 GetObjectResponse 方法之一以处理流。

下面是您可能使用的一些变体:

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

    GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName, ByteRange = new ByteRange(0, 10) };
  • 在检索对象时,您可以选择通过使用 获取对象 对象并设置相应的请求属性来替换响应标头值 (参阅 ResponseHeaderOverrides)。以下 C# 代码示例演示了如何执行此操作。您可以使用此功能指示应该将对象下载到具有与对象键名称不同的文件名的文件中。

    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 代码示例

using Amazon.S3; using Amazon.S3.Model; using System; using System.IO; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class GetObjectTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); ReadObjectDataAsync().Wait(); } static async Task ReadObjectDataAsync() { string responseBody = ""; try { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = await client.GetObjectAsync(request)) using (Stream responseStream = response.ResponseStream) using (StreamReader reader = new StreamReader(responseStream)) { string title = response.Metadata["x-amz-meta-title"]; // Assume you have "title" as medata added to the object. string contentType = response.Headers["Content-Type"]; Console.WriteLine("Object metadata, Title: {0}", title); Console.WriteLine("Content type: {0}", contentType); responseBody = reader.ReadToEnd(); // Now you process the response body. } } 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); } } } }