如果仅需要文件中的部分数据,您可以使用范围下载,下载指定范围内的数据。
范围下载的完整代码请参见GitHub。
以下代码用于范围下载:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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。 |