本文介绍如何列举文件。
列举文件的完整代码请参见GitHub。
OSS文件按照字母顺序排列。您可以通过ListObjects列出存储空间下的文件。主要的参数如下:
参数 | 说明 |
---|---|
Delimiter | 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 |
Marker | 标明本次列举文件的起点。 |
MaxKeys | 列举文件的最大个数。默认为100,最大值为1000。 |
Prefix | 本次查询结果的前缀。 |
简单列举文件
简单列举文件的完整代码请参见GitHub。
以下代码用于列举指定存储空间下的文件:
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); }
列举指定个数的文件
以下代码用于列举指定个数的文件:
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)的文件:
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之后的文件:
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。
以下代码用于异步方式列举文件:
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); } } } }
列举所有文件
以下代码用于列举指定存储空间下的所有文件:
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); } }