全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

查看对象列表

更新时间:2017-06-07 13:26:11

查看对象列表即列出您在Bucket中上传的文件(Object),您可以通过OSS的接口调用一次性得到某一Bucket下最多1000个的Object列表。通过下面的四个参数,您可以完成多种拓展功能:

名称 作用
Delimiter 用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现Delimiter字符之间的Object作为一组元素: CommonPrefixes。
Marker 设定结果从Marker之后按字母排序的第一个开始返回。
MaxKeys 限定此次返回Object的最大数,如果不设定,默认为100,MaxKeys取值不能大于1000。
Prefix 限定返回的Object key必须以Prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含Prefix。

文件夹模拟功能

OSS服务是没有文件夹这个概念的,所有元素都是以Object来存储。创建模拟文件夹本质上来说是创建了一个size为0的Object。对于这个Object照样可以上传下载,只是控制台会对以“/”结尾的Object以文件夹的方式展示。所以您可以使用上述方式来实现创建模拟文件夹。

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

  • 如果把 Prefix 设为某个文件夹名,就可以罗列以此 Prefix 开头的文件,即该文件夹下递归的所有的文件和子文件夹(目录)。文件名在Contents中显示。
  • 如果再把 Delimiter 设置为 “/” 时,返回值就只罗列该文件夹下的文件和子文件夹(目录),该文件夹下的子文件名(目录)返回在 CommonPrefixes 部分,子文件夹下递归的文件和文件夹不被显示。
  1. 举个例子:
  2. 假如在OSSBucketoss-sample下有如下Object
  3. 文件D
  4. 目录A/文件C
  5. 目录A/文件D
  6. 目录A/目录B/文件B
  7. 目录A/目录B/目录C/文件A
  8. 目录A/目录C/文件A
  9. 目录A/目录D/文件B
  10. 目录B/文件A
  11. 1. 列出第一层目录和文件
  12. 根据API中请求约定,需要设置Prefix为“”,Delimiter"/":
  13. 返回结果如下:
  14. <?xml version="1.0" encoding="UTF-8"?>
  15. <ListBucketResult>
  16. <Name>oss-sample</Name>
  17. <Prefix></Prefix>
  18. <Marker></Marker>
  19. <MaxKeys>1000</MaxKeys>
  20. <Delimiter>/</Delimiter>
  21. <IsTruncated>false</IsTruncated>
  22. <Contents>
  23. <Key>文件D</Key>
  24. <LastModified>2015-11-06T10:07:11.000Z</LastModified>
  25. <ETag>"8110930DA5E04B1ED5D84D6CC4DC9080"</ETag>
  26. <Type>Normal</Type>
  27. <Size>3340</Size>
  28. <StorageClass>Standard</StorageClass>
  29. <Owner>
  30. <ID>oss</ID>
  31. <DisplayName>oss</DisplayName>
  32. </Owner>
  33. </Contents>
  34. <CommonPrefixes>
  35. <Prefix>目录A/</Prefix>
  36. </CommonPrefixes>
  37. <CommonPrefixes>
  38. <Prefix>目录B/</Prefix>
  39. </CommonPrefixes>
  40. </ListBucketResult>
  41. 可以看到:
  42. Contents返回的是第一层的文件:“文件D”。
  43. CommonPrefixes返回的是第一层的目录:“目录A/” “目录B/”,而“目录A/” “目录B/”下的文件名不显示。
  44. 2. 列出第二层目录A底下的目录和文件
  45. 根据API中请求约定,需要设置Prefix为“目录A”,Delimiter"/":
  46. 返回结果如下:
  47. <?xml version="1.0" encoding="UTF-8"?>
  48. <ListBucketResult>
  49. <Name>oss-sample</Name>
  50. <Prefix>目录A/</Prefix>
  51. <Marker></Marker>
  52. <MaxKeys>1000</MaxKeys>
  53. <Delimiter>/</Delimiter>
  54. <IsTruncated>false</IsTruncated>
  55. <Contents>
  56. <Key>目录A/文件C</Key>
  57. <LastModified>2015-11-06T09:36:00.000Z</LastModified>
  58. <ETag>"B026324C6904B2A9CB4B88D6D61C81D1"</ETag>
  59. <Type>Normal</Type>
  60. <Size>2</Size>
  61. <StorageClass>Standard</StorageClass>
  62. <Owner>
  63. <ID>oss</ID>
  64. <DisplayName>oss</DisplayName>
  65. </Owner>
  66. </Contents>
  67. <Contents>
  68. <Key>目录A/文件D</Key>
  69. <LastModified>2015-11-06T09:36:00.000Z</LastModified>
  70. <ETag>"B026324C6904B2A9CB4B88D6D61C81D1"</ETag>
  71. <Type>Normal</Type>
  72. <Size>2</Size>
  73. <StorageClass>Standard</StorageClass>
  74. <Owner>
  75. <ID>oss</ID>
  76. <DisplayName>oss</DisplayName>
  77. </Owner>
  78. </Contents>
  79. <CommonPrefixes>
  80. <Prefix>目录A/目录B/</Prefix>
  81. </CommonPrefixes>
  82. <CommonPrefixes>
  83. <Prefix>目录A/目录C/</Prefix>
  84. </CommonPrefixes>
  85. <CommonPrefixes>
  86. <Prefix>目录A/目录D/</Prefix>
  87. </CommonPrefixes>
  88. </ListBucketResult>
  89. 可以看到:
  90. Contents返回的是第二层的文件:“目录A/文件C”,“目录A/文件D”。
  91. CommonPrefixes返回的是第一层的目录:“目录A/目录B/”,“目录A/目录C/”和“目录A/目录D/”。而目录下的文件名不会被显示。

功能使用参考

本文导读目录