默认情况下,在受版本控制的存储空间(Bucket)中调用GetObject接口仅返回文件(Object)的当前版本。
对某个Bucket执行GetObject操作时,分以下三种情况:
- 如果该Bucket中Object的当前版本是删除标记(Delete Marker),则返回404 Not Found。
- 如果在查询参数中指定Object的versionId,则返回指定的Object版本。当versionId指定为“null”时,则返回versionId为“null”的Object版本。
- 通过指定versionId的方式来获取删除标记时,则返回405 Method Not Allowed。
以下代码用于下载文件:
using Aliyun.OSS;
var endpoint = "<yourEndpoint>";
var accessKeyId = "<yourAccessKeyId>";
var accessKeySecret = "<yourAccessKeySecret>";
var bucketName = "<yourBucketName>";
// objectName 表示您在下载文件时需要指定的文件名称,如abc/efg/123.jpg。
var objectName = "<yourObjectName>";
var downloadFilename = "<yourDownloadFilename>";
var versionid = "<yourArchiveObjectVersionid>";
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// 下载文件到流。OssObject包含了文件的各种信息,如文件所在的存储空间、文件名、元信息以及一个输入流。
var request = new GetObjectRequest(bucketName, objectName)
{
// 指定Object的版本id。
VersionId = versionid
};
var obj = client.GetObject(request);
using (var requestStream = obj.Content)
{
byte[] buf = new byte[1024];
var fs = File.Open(downloadFilename, FileMode.OpenOrCreate);
var len = 0;
// 通过输入流将文件的内容读取到文件或者内存中。
while ((len = requestStream.Read(buf, 0, 1024)) != 0)
{
fs.Write(buf, 0, len);
}
fs.Close();
}
Console.WriteLine("Get object succeeded, vesionid:{0}", obj.VersionId);
}
catch (Exception ex)
{
Console.WriteLine("Get object failed. {0}", ex.Message);
}
下载文件的详细信息请参见GetObject。