在OSS中,用户操作的基本数据单元是文件(Object)。单个文件最大允许大小根据上传数据方式不同而不同,Put Object方式最大不能超过5GB, 使用multipart上传方式文件大小不能超过48.8TB。
简单的上传
上传指定字符串:
- using System.Text;
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret)
- try
- {
- string str = "a line of simple text";
- byte[] binaryData = Encoding.ASCII.GetBytes(str);
- MemoryStream requestContent = new MemoryStream(binaryData);
- client.PutObject(bucketName, key, requestContent);
- Console.WriteLine("Put object succeeded");
- }
- catch (Exception ex)
- {
- Console.WriteLine("Put object failed, {0}", ex.Message);
- }
说明: 完整代码参考:
GitHub。
上传指定的本地文件
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- try
- {
- string fileToUpload = "your local file path";
- client.PutObject(bucketName, key, fileToUpload);
- Console.WriteLine("Put object succeeded");
- }
- catch (Exception ex)
- {
- Console.WriteLine("Put object failed, {0}", ex.Message);
- }
说明: 完整代码参考
GitHub。
上传文件并且带MD5校验
- using Aliyun.OSS;
- using Aliyun.OSS.util;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- try
- {
- string fileToUpload = "your local file path";
- string md5;
- using (var fs = File.Open(fileToUpload, FileMode.Open));
- {
- md5 = OssUtils.ComputeContentMd5(fs, fs.Length);
- }
- var objectMeta = new ObjectMetadata
- {
- ContentMd5 = md5
- };
- client.PutObject(bucketName, key, fileToUpload, objectMeta);
- Console.WriteLine("Put object succeeded");
- }
- catch (Exception ex)
- {
- Console.WriteLine("Put object failed, {0}", ex.Message);
- }
说明:
- 完整代码参考GitHub。
- 为了保证SDK发送的数据和OSS服务端接收到的数据一致,可以在ObjectMeta中增加Content-Md5值,这样服务端就会使用这个MD5值做校验。
- 使用Md5时,性能会有所损失。
上传文件带Header
带标准Header
OSS服务允许用户自定义文件的Http Header。下面代码为文件设置了过期时间:
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- try
- {
- using (var fs = File.Open(fileToUpload, FileMode.Open))
- {
- var metadata = new ObjectMetadata();
- metadata.ContentLength = fs.Length;
- metadata.ExpirationTime = DateTime.Parse("2015-10-12T00:00:00.000Z");
- client.PutObject(bucketName, key, fs, metadata);
- Console.WriteLine("Put object succeeded");
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("Put object failed, {0}", ex.Message);
- }
说明:
- 完整代码参考GitHub。
- .NET SDK支持的Http Header:Cache-Control 、 Content-Disposition 、Content-Encoding 、 Expires、Content-Type等 。
- 它们的相关介绍见 RFC2616 。
带自定义Header
OSS支持用户自定义元信息来对文件进行描述。比如:
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- try
- {
- using (var fs = File.Open(fileToUpload, FileMode.Open))
- {
- var metadata = new ObjectMetadata();
- metadata.UserMetadata.Add("name", "my-data");
- metadata.ContentLength = fs.Length;
- client.PutObject(bucketName, key, fs, metadata);
- Console.WriteLine("Put object succeeded");
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("Put object failed, {0}", ex.Message);
- }
说明:
- 完整代码参考GitHub。
- 在上面代码中,用户自定义了一个名字为“name”,值为“my-data”的元信息。
- 当用户下载此文件的时候,此元信息也可以一并得到。
- 一个文件可以有多个类似的参数,但所有的user meta总大小不能超过2KB。
- 使用上述方法上传最大文件不能超过5G。如果超过可以使用MutipartUpload上传。
- user meta的名称大小写不敏感,比如用户上传文件时,定义名字为“Name”的meta,在表头中存储的参数为:“x-oss-meta-name”,所以读取时读取名字为“name”的参数即可。
- 但如果存入参数为“name”,读取时使用“Name”读取不到对应信息,会返回“null”。