.NET范围下载

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

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化

  • 要范围下载,您必须有oss:GetObject权限。具体操作,请参见为RAM用户授权自定义的权限策略

示例代码

以下代码用于下载指定范围内的数据。

using Aliyun.OSS;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填写Bucket名称,例如examplebucket。
var bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// 下载Object到本地文件examplefile.txt,并保存到指定的本地路径中(D:\\localpath)。如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
var downloadFilename = "D:\\localpath\\examplefile.txt";

// 创建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。

相关文档

  • 关于范围下载的完整示例代码,请参见GitHub示例

  • 关于范围下载的API接口说明,请参见GetObject