上传对象
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需要使用分片上传。