获取对象

GetObject操作可以获取对象数据,并且保存为本地文件。执行GetObject操作必须对目标Object具有READ权限。

代码示例:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace DotNetSDK.ObjectOperation
{
    public class GetObjectExample
    {
        public static async Task GetObject()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            var key = "EXAMPLE_KEY";
            var filePath = "LOCAL_FILE_PATH";
            try
            {
                var credentials = new BasicAWSCredentials(accessKey, secretKey);
                var conf = new AmazonS3Config
                {
                    ServiceURL = endpoint
                };
                var s3Client = new AmazonS3Client(credentials, conf);
                var getObjectRequest = new GetObjectRequest()
                {
                    BucketName = bucketName,
                    Key = key
                };

                using (var result = await s3Client.GetObjectAsync(getObjectRequest))
                using (Stream stream = result.ResponseStream)
                {
                    var fileStream = File.Create(filePath);
                    await stream.CopyToAsync(fileStream);
                    fileStream.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

GetObjectRequest可设置的参数如下:

参数 类型 说明 是否必要
BucketName string bucket的名称。
EtagToMatch string 用于指定只有在对象的ETag和该参数值匹配的情况下才返回对象数据,否则返回412错误码。
ModifiedSinceDateUtc DateTime 用于只有当对象在指定时间后被修改的情况下才返回该对象,否则返回304错误码。
EtagToNotMatch string 用于指定只有在对象的ETag和该参数值不匹配的情况下才返回对象数据,否则返回304错误码
UnmodifiedSinceDateUtc DateTime 用于仅当对象自指定时间以来未被修改的情况下才返回对象数据,否则返回412错误码。
Key string 对象的key。
PartNumber int 读取对象指定的片段,该参数大于等于1,小于等于10000。
ByteRange ByteRange 下载对象指定范围内的数据(单位:字节)。
VersionId string 当bucket开启版本控制的时候,用于指定获取指定版本的对象数据,当不指定该参数的时候,默认获取最新版本的对象数据。

GetObject返回的结果如下:

参数 类型 说明
BucketName string 对象所在bucket的名称。
ContentLength long 对象数据的长度,单位为字节。
ETag string 对象的Entity Tag。
LastModified DateTime 最后修改对象的时间。
TagCount int 对象标签的数量。
VersionId string 对象的版本ID。

响应结果:

HTTP状态码 响应码 描述
200 OK 操作成功。
400 BadRequest 上传的文件太大或者对象的名字不合法。
403 Forbidden 用户没有权限执行操作。
404 NotFound 操作指定的bucket或者对象不存在。