开发者社区> 问答> 正文

.NET-SDK之如何实现管理文件(三)?


文件夹功能模拟


我们还可以通过 Delimiter 和 Prefix 参数的配合模拟出文件夹功能。Delimiter 和 Prefix 的组合效果是这样的:

  • 如果把 Prefix 设为某个文件夹名,就可以罗列以此 Prefix 开头的文件,即该文件夹下递归的所有的文件和子文件夹。
  • 如果再把 Delimiter 设置为“/”时,返回值就只罗列该文件夹下的文件,该文件夹下的子文件夹返回在 CommonPrefixes 部分,子文件夹下递归的文件和文件夹不被显示。假设Bucket中有4个文件: oss.jpg、fun/test.jpg、fun/movie/001.avi、fun/movie/007.avi ,我们把“/”符号作为文件夹的分隔符。


列出存储空间内所有文件


当我们需要获取存储空间下的所有文件时,可以这样写:
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. public void ListObject(string bucketName)
  5. {
  6.     try
  7.     {
  8.         ObjectListing result = null;
  9.         string nextMarker = string.Empty;
  10.         do
  11.         {
  12.             var listObjectsRequest = new ListObjectsRequest(bucketName)
  13.             {
  14.                 Marker = nextMarker,
  15.                 MaxKeys = 100
  16.             };
  17.             result = client.ListObjects(listObjectsRequest);  
  18.             Console.WriteLine("File:");
  19.             foreach (var summary in result.ObjectSummaries)
  20.             {
  21.                 Console.WriteLine("Name:{0}", summary.Key);
  22.             }
  23.             nextMarker = result.NextMarker;
  24.         } while (result.IsTruncated);
  25.     }
  26.     catch (Exception ex)
  27.     {
  28.         Console.WriteLine("List object failed. {0}", ex.Message);
  29.     }
  30. }

输出:
  1. File:
  2. Name:fun/movie/001.avi
  3. Name:fun/movie/007.avi
  4. Name:fun/test.jpg
  5. Name:oss.jpg


递归列出目录下所有文件


我们可以通过设置 Prefix 参数来获取某个目录下所有的文件:
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. public void ListObject(string bucketName)
  5. {
  6.     try
  7.     {
  8.         var listObjectsRequest = new ListObjectsRequest(bucketName)
  9.         {
  10.              Prefix = "fun/"
  11.         };
  12.         result = client.ListObjects(listObjectsRequest);
  13.         Console.WriteLine("List object succeeded");
  14.         Console.WriteLine("File:");
  15.         foreach (var summary in result.ObjectSummaries)
  16.         {
  17.             Console.WriteLine("Name:{0}", summary.Key);
  18.         }
  19.         Console.WriteLine("Dir:");
  20.         foreach (var prefix in result.CommonPrefixes)
  21.         {
  22.             Console.WriteLine("Name:{0}", prefix);
  23.         }
  24.     }
  25.     catch (Exception ex)
  26.     {
  27.         Console.WriteLine("List object failed. {0}", ex.Message);
  28.     }
  29. }

输出:
  1. List object succeeded
  2. File:
  3. Name:fun/movie/001.avi
  4. Name:fun/movie/007.avi
  5. Name:fun/test.jpg
  6. 目录:

展开
收起
青衫无名 2017-10-18 15:20:02 1645 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
从 SDK 到编解码:视频直播架构解析 立即下载
跨平台的云服务SDK需要什么 立即下载
一个跨平台的云服务SDK需要什么 立即下载