融合接口

SDK提供封装好的融合接口,方便用户实现分片上传的功能。

接口定义:

public void Upload(string filePath, string bucketName, string key);

public void Upload(Stream stream, string bucketName, string key);

public void Upload(TransferUtilityUploadRequest request);

public Task UploadAsync(string filePath, string bucketName, string key, CancellationToken cancellationToken = default);

public Task UploadAsync(Stream stream, string bucketName, string key, CancellationToken cancellationToken = default);

public Task UploadAsync(TransferUtilityUploadRequest request, CancellationToken cancellationToken = default);

参数:

参数名 类型 说明
bucketName string bucket名
key string 要上传的对象名称
filePath string 上传的文件路径(和stream二选一)
stream Stream 上传的文件流(和filePath二选一)
request TransferUtilityUploadRequest 上传请求

TransferUtilityUploadRequest主要参数:

参数名 类型 说明
BucketName string bucket名
Key string 要上传的对象名称
FilePath string 上传的文件路径(和InputStream二选一)
InputStream Stream 上传的文件流(和FilePath二选一)
PartSize long 分片大小,默认5MB
ContentType string 描述上传文件格式的标准MIME类型
CannedACL S3CannedACL 标准ACL信息(Private|PublicRead)

代码示例:

class TransDemo
{
	private readonly AmazonS3Client s3Client;
	private readonly TransferUtility utility;
	private string bucket = Config.Bucket;

	public TransDemo()
	{
		var credentials = new BasicAWSCredentials(Config.AccessKey, Config.SecretKey);
		var conf = new AmazonS3Config
		{
			ServiceURL = Config.EndPoint,
			AuthenticationRegion = "cn",
			Timeout = TimeSpan.FromSeconds(20),
			MaxErrorRetry = 2,
		};
		this.s3Client = new AmazonS3Client(credentials, conf);
		this.utility = new TransferUtility(this.s3Client);
	}

	public void UploadFile()
	{
		Console.Out.WriteLine("UploadFile");
		var key = "ExampleObject.txt";
		var filePath = "E:/ExampleObject.txt";
		this.utility.Upload(filePath, bucket, key);
		Console.Out.WriteLine("UploadFile success");
	}
}

关于Content-Type的配置

Content-Type用于标识文件的资源类型,比如image/pngimage/jpg 是图片类型,video/mpegvideo/mp4是视频类型,text/plaintext/html是文本类型, 浏览器针对不同的Content-Type会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。application/octet-stream类型会直接打开下载窗口。

在dotnet sdk中,如果用户没有设置Content-Type,会根据对象的key后缀扩展名自动生成Content-Type。