上传对象

PutObject操作用于上传对象。如果对同一个对象同时发起多个上传请求,最后一次完成的请求将覆盖之前所有请求的上传的对象。可以通过设置请求头部中的Content-MD5字段来保证数据被完整上传,如果上传的数据不能通过MD5校验,该操作将返回一个错误提示。用户可以通过比较上传对象后获得的ETag 与原文件的MD5值是否相等来确认上传操作是否成功。

代码示例:

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

namespace DotNetSDK.ObjectOperation
{
    public class PutObjectExample
    {
        public static async Task PutObject()
        {
            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 putObjectRequest = new PutObjectRequest()
                {
                    BucketName = bucketName,
                    Key = key,
                    FilePath = filePath
                };

                var result = await s3Client.PutObjectAsync(putObjectRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine("fail to put object {0}, HttpStatusCode:{1}, ErrorCode:{2}.", key, (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                Console.WriteLine("put obejct {0}, ETag: {1}, versionId:{2}", key, result.ETag, result.VersionId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

PutObjectRequest可设置的参数如下:

参数 类型 说明 是否必要
CannedACL S3CannedACL 配置上传对象的预定义的标准ACL信息。
ContentBody string 上传对象的数据内容,与FilePath、InputStream任选其一作为上传对象数据的来源。
ContentType string 描述上传文件格式的标准MIME类型。
FilePath string 上传文件的本地路径,与ContentBody、InputStream任选其一作为上传对象数据的来源。
InputStream Stream 对象的数据,与ContentBody、FilePath任选其一作为上传对象数据的来源。
Bucket string bucket的名称。
MD5Digest string 上传对象数据的base64编码的128位MD5值,不包含请求头部的信息。
Key string 上传文件到媒体存储服务后对应的key。
Tagset List<Tag> 对象的标签信息。
WebsiteRedirectLocation string 如果bucket被配置用于提供网站的静态数据,该参数可以用于设置访问对象时候重定向到当前bucket下的其他对象或者外部的URL。

PutObject返回的结果如下:

参数 类型 说明
ETag string 上传对象后的对应的Entity Tag。
VersionId string 上传对象后相应的版本ID。

响应结果:

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

注意:putObject对文件大小有限制,最大能上传1GB大小的文件,超过1GB需要使用分片上传。