如果仅需要文件中的部分数据,您可以使用范围下载,下载指定范围内的数据。

范围下载的完整代码请参见GitHub

以下代码用于范围下载:

using Aliyun.OSS;
var endpoint = "<yourEndpoint>";
var accessKeyId = "<yourAccessKeyId>";
var accessKeySecret = "<yourAccessKeySecret>";
var bucketName = "<yourBucketName>";
var objectName = "<yourObjectName>";
var downloadFilename = "<yourDownloadFilename>";
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    var getObjectRequest = new GetObjectRequest(bucketName, objectName);
    // 设置Range,取值范围为第20至第100字节。
    getObjectRequest.SetRange(20, 100);
    // 范围下载。getObjectRequest的setRange可以实现文件的分段下载和断点续传。
    var obj = client.GetObject(getObjectRequest);
    // 下载数据并写入文件。
    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");
}
catch (Exception ex)
{
    Console.WriteLine("Get object failed. {0}", ex.Message);
}

GetObjectRequest可以设置以下参数:

参数 说明
Range 指定文件传输的范围。
ModifiedSinceConstraint 如果指定的时间早于实际修改时间,则正常传送文件。否则抛出304 Not Modified异常。
UnmodifiedSinceConstraint 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件。否则抛出412 precondition failed异常。
MatchingETagConstraints 传入一组ETag,如果传入期望的ETag和文件的 ETag匹配,则正常传输文件。否则抛出412 precondition failed异常。
NonmatchingEtagConstraints 传入一组ETag,如果传入的ETag值和文件的ETag不匹配,则正常传输文件。否则抛出304 Not Modified异常。
ResponseHeaderOverrides 自定义OSS返回请求中的一些Header。