本文介绍如何列举文件。
列举文件的完整代码请参见GitHub。
OSS文件按照字母顺序排列。您可以通过ListObjects列出存储空间下的文件。主要的参数如下:
参数 | 说明 |
---|---|
Delimiter | 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 |
Marker | 标明本次列举文件的起点。 |
MaxKeys | 列举文件的最大个数。默认为100,最大值为1000。 |
Prefix | 本次查询结果的前缀。 |
简单列举文件
简单列举文件的完整代码请参见GitHub。
以下代码用于列举指定存储空间下的文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using Aliyun.OSS; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var listObjectsRequest = new ListObjectsRequest(bucketName); // 简单列举存储空间下的文件,默认返回100条记录。 var result = client.ListObjects(listObjectsRequest); Console.WriteLine( "List objects succeeded" ); foreach (var summary in result.ObjectSummaries) { Console.WriteLine( "File name:{0}" , summary.Key); } } catch (Exception ex) { Console.WriteLine( "List objects failed. {0}" , ex.Message); } |
列举指定个数的文件
以下代码用于列举指定个数的文件:
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 | using Aliyun.OSS; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var listObjectsRequest = new ListObjectsRequest(bucketName) { // 最大返回200条记录。 MaxKeys = 200 , }; var result = client.ListObjects(listObjectsRequest); Console.WriteLine( "List objects succeeded" ); foreach (var summary in result.ObjectSummaries) { Console.WriteLine(summary.Key); } } catch (Exception ex) { Console.WriteLine( "List objects failed, {0}" , ex.Message); } |
列举指定前缀的文件
以下代码用于列举包含指定前缀(prefix)的文件:
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 35 36 37 38 39 40 41 | using Aliyun.OSS; using Aliyun.OSS.Common; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; var prefix = "<yourObjectPrefix>" ; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var keys = new List<string>(); ObjectListing result = null ; string nextMarker = string.Empty; do { var listObjectsRequest = new ListObjectsRequest(bucketName) { Marker = nextMarker, MaxKeys = 100 , Prefix = prefix, }; result = client.ListObjects(listObjectsRequest); foreach (var summary in result.ObjectSummaries) { Console.WriteLine(summary.Key); keys.Add(summary.Key); } nextMarker = result.NextMarker; } while (result.IsTruncated); Console.WriteLine( "List objects of bucket:{0} succeeded " , bucketName); } catch (OssException ex) { Console.WriteLine( "Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}" , ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine( "Failed with error info: {0}" , ex.Message); } |
列举指定marker之后的文件
参数marker代表文件名称。以下代码用于列举指定marker之后的文件:
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 35 36 37 38 39 40 41 42 | using Aliyun.OSS; using Aliyun.OSS.Common; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; var marker = "<yourObjectMarker>" ; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var keys = new List<string>(); ObjectListing result = null ; string nextMarker = marker; do { var listObjectsRequest = new ListObjectsRequest(bucketName) // 若想增大返回文件数目,可以修改MaxKeys参数,或者使用Marker参数分次读取。 { Marker = nextMarker, MaxKeys = 100 , }; result = client.ListObjects(listObjectsRequest); foreach (var summary in result.ObjectSummaries) { Console.WriteLine(summary.Key); keys.Add(summary.Key); } nextMarker = result.NextMarker; // 如果IsTruncated为 true, NextMarker将作为下次读取的起点。 } while (result.IsTruncated); Console.WriteLine( "List objects of bucket:{0} succeeded " , bucketName); } catch (OssException ex) { Console.WriteLine( "Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}" , ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine( "Failed with error info: {0}" , ex.Message); } |
通过异步方式列举文件
通过异步方式列举文件完整代码请参见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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | using System; using System.IO; using System.Threading; using Aliyun.OSS; namespace AsyncListObjects { class Program { static string endpoint = "<yourEndpoint>" ; static string accessKeyId = "<yourAccessKeyId>" ; static string accessKeySecret = "<yourAccessKeySecret>" ; static string bucketName = "<yourBucketName>" ; static AutoResetEvent _event = new AutoResetEvent( false ); // 创建OssClient实例。 static OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); static void Main(string[] args) { Program.AsyncListObjects(); Console.ReadKey(); } public static void AsyncListObjects() { try { var listObjectsRequest = new ListObjectsRequest(bucketName); client.BeginListObjects(listObjectsRequest, ListObjectCallback, null ); _event.WaitOne(); } catch (Exception ex) { Console.WriteLine( "Async list objects failed. {0}" , ex.Message); } } // 通过ListObjectCallback方法异步调用结束后执行回调,如果使用异步类型的接口,都需要实现类似接口。 private static void ListObjectCallback(IAsyncResult ar) { try { var result = client.EndListObjects(ar); foreach (var summary in result.ObjectSummaries) { Console.WriteLine( "文件名称: {0}" , summary.Key); } _event.Set(); Console.WriteLine( "Async list objects succeeded" ); } catch (Exception ex) { Console.WriteLine( "Async list objects failed. {0}" , ex.Message); } } } } |
列举所有文件
以下代码用于列举指定存储空间下的所有文件:
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 | using Aliyun.OSS; // 初始化OssClient。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); // 列举所有文件。 public void ListObject(string bucketName) { try { ObjectListing result = null ; string nextMarker = string.Empty; do { // 每页列举的文件个数通过maxKeys指定,超过指定数将进行分页显示。 var listObjectsRequest = new ListObjectsRequest(bucketName) { Marker = nextMarker, MaxKeys = 100 }; result = client.ListObjects(listObjectsRequest); Console.WriteLine( "File:" ); foreach (var summary in result.ObjectSummaries) { Console.WriteLine( "Name:{0}" , summary.Key); } nextMarker = result.NextMarker; } while (result.IsTruncated); } catch (Exception ex) { Console.WriteLine( "List object failed. {0}" , ex.Message); } } |