默认情况下,在受版本控制的存储空间(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