列举文件
本文介绍如何列举文件。
列举文件的完整代码请参见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);
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论