文件夹功能模拟
我们还可以通过 Delimiter 和 Prefix 参数的配合模拟出文件夹功能。Delimiter 和 Prefix 的组合效果是这样的:
- 如果把 Prefix 设为某个文件夹名,就可以罗列以此 Prefix 开头的文件,即该文件夹下递归的所有的文件和子文件夹。
- 如果再把 Delimiter 设置为“/”时,返回值就只罗列该文件夹下的文件,该文件夹下的子文件夹返回在 CommonPrefixes 部分,子文件夹下递归的文件和文件夹不被显示。假设Bucket中有4个文件: oss.jpg、fun/test.jpg、fun/movie/001.avi、fun/movie/007.avi ,我们把“/”符号作为文件夹的分隔符。
列出存储空间内所有文件
当我们需要获取存储空间下的所有文件时,可以这样写:
- 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
- {
- 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);
- }
- }
输出:
- File:
- Name:fun/movie/001.avi
- Name:fun/movie/007.avi
- Name:fun/test.jpg
- Name:oss.jpg
递归列出目录下所有文件
我们可以通过设置 Prefix 参数来获取某个目录下所有的文件:
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- public void ListObject(string bucketName)
- {
- try
- {
- var listObjectsRequest = new ListObjectsRequest(bucketName)
- {
- Prefix = "fun/"
- };
- result = client.ListObjects(listObjectsRequest);
- Console.WriteLine("List object succeeded");
- Console.WriteLine("File:");
- foreach (var summary in result.ObjectSummaries)
- {
- Console.WriteLine("Name:{0}", summary.Key);
- }
- Console.WriteLine("Dir:");
- foreach (var prefix in result.CommonPrefixes)
- {
- Console.WriteLine("Name:{0}", prefix);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("List object failed. {0}", ex.Message);
- }
- }
输出:
- List object succeeded
- File:
- Name:fun/movie/001.avi
- Name:fun/movie/007.avi
- Name:fun/test.jpg
- 目录: