开发者社区 问答 正文

Java-SDK - 管理文件(四)



分页所有获取指定前缀的Object


分页所有获取指定前缀的Object,每页maxKeys条Object。

  1. [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]int[backcolor=transparent] maxKeys [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]200[backcolor=transparent];
  2. [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] keyPrefix [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"<keyPrefix>"[backcolor=transparent];
  3. [backcolor=transparent]String[backcolor=transparent] nextMarker [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"<nextMarker>"[backcolor=transparent];
  4. [backcolor=transparent]do[backcolor=transparent] [backcolor=transparent]{
  5. [backcolor=transparent]    objectListing [backcolor=transparent]=[backcolor=transparent] ossClient[backcolor=transparent].[backcolor=transparent]listObjects[backcolor=transparent]([backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ListObjectsRequest[backcolor=transparent]([backcolor=transparent]"<bucketName>"[backcolor=transparent]).
  6. [backcolor=transparent]            withPrefix[backcolor=transparent]([backcolor=transparent]keyPrefix[backcolor=transparent]).[backcolor=transparent]withMarker[backcolor=transparent]([backcolor=transparent]nextMarker[backcolor=transparent]).[backcolor=transparent]withMaxKeys[backcolor=transparent]([backcolor=transparent]maxKeys[backcolor=transparent]));
  7. [backcolor=transparent]    [backcolor=transparent]List[backcolor=transparent]<[backcolor=transparent]OSSObjectSummary[backcolor=transparent]>[backcolor=transparent] sums [backcolor=transparent]=[backcolor=transparent] objectListing[backcolor=transparent].[backcolor=transparent]getObjectSummaries[backcolor=transparent]();
  8. [backcolor=transparent]    [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]OSSObjectSummary[backcolor=transparent] s [backcolor=transparent]:[backcolor=transparent] sums[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  9. [backcolor=transparent]        [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"\t"[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] s[backcolor=transparent].[backcolor=transparent]getKey[backcolor=transparent]());
  10. [backcolor=transparent]    [backcolor=transparent]}
  11. [backcolor=transparent]    nextMarker [backcolor=transparent]=[backcolor=transparent] objectListing[backcolor=transparent].[backcolor=transparent]getNextMarker[backcolor=transparent]();
  12. [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]while[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]objectListing[backcolor=transparent].[backcolor=transparent]isTruncated[backcolor=transparent]());


指定Object名字编码


如果Object名字含有特殊字符,如 ' " & < >、中文 等,需要进行编码传输。OSS目前支持 url 编码。
  1. [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]int[backcolor=transparent] maxKeys [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]200[backcolor=transparent];
  2. [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] keyPrefix [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"<keyPrefix>"[backcolor=transparent];
  3. [backcolor=transparent]String[backcolor=transparent] nextMarker [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"<nextMarker>"[backcolor=transparent];[backcolor=transparent]
  4. [backcolor=transparent]ObjectListing[backcolor=transparent] objectListing[backcolor=transparent];
  5. [backcolor=transparent]do[backcolor=transparent] [backcolor=transparent]{
  6. [backcolor=transparent]    [backcolor=transparent]ListObjectsRequest[backcolor=transparent] listObjectsRequest [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ListObjectsRequest[backcolor=transparent]([backcolor=transparent]bucketName[backcolor=transparent]);
  7. [backcolor=transparent]    listObjectsRequest[backcolor=transparent].[backcolor=transparent]setPrefix[backcolor=transparent]([backcolor=transparent]keyPrefix[backcolor=transparent]);
  8. [backcolor=transparent]    listObjectsRequest[backcolor=transparent].[backcolor=transparent]setMaxKeys[backcolor=transparent]([backcolor=transparent]maxKeys[backcolor=transparent]);
  9. [backcolor=transparent]    listObjectsRequest[backcolor=transparent].[backcolor=transparent]setMarker[backcolor=transparent]([backcolor=transparent]nextMarker[backcolor=transparent]);
  10. [backcolor=transparent]    [backcolor=transparent]// 指定Object名称编码传输
  11. [backcolor=transparent]    listObjectsRequest[backcolor=transparent].[backcolor=transparent]setEncodingType[backcolor=transparent]([backcolor=transparent]"url"[backcolor=transparent]);
  12. [backcolor=transparent]    objectListing [backcolor=transparent]=[backcolor=transparent] ossClient[backcolor=transparent].[backcolor=transparent]listObjects[backcolor=transparent]([backcolor=transparent]listObjectsRequest[backcolor=transparent]);
  13. [backcolor=transparent]    [backcolor=transparent]// Object解码
  14. [backcolor=transparent]    [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]OSSObjectSummary[backcolor=transparent] objectSummary[backcolor=transparent]:[backcolor=transparent] objectListing[backcolor=transparent].[backcolor=transparent]getObjectSummaries[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  15. [backcolor=transparent]        [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"Key:"[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]URLDecoder[backcolor=transparent].[backcolor=transparent]decode[backcolor=transparent]([backcolor=transparent]objectSummary[backcolor=transparent].[backcolor=transparent]getKey[backcolor=transparent](),[backcolor=transparent] [backcolor=transparent]"UTF-8"[backcolor=transparent]));
  16. [backcolor=transparent]    [backcolor=transparent]}
  17. [backcolor=transparent]    [backcolor=transparent]// CommonPrefixe解码
  18. [backcolor=transparent]    [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] commonPrefixes[backcolor=transparent]:[backcolor=transparent] objectListing[backcolor=transparent].[backcolor=transparent]getCommonPrefixes[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  19. [backcolor=transparent]        [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"CommonPrefixes:"[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]URLDecoder[backcolor=transparent].[backcolor=transparent]decode[backcolor=transparent]([backcolor=transparent]commonPrefixes[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"UTF-8"[backcolor=transparent]));
  20. [backcolor=transparent]    [backcolor=transparent]}
  21. [backcolor=transparent]    [backcolor=transparent]// NextMarker解码
  22. [backcolor=transparent]    [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]objectListing[backcolor=transparent].[backcolor=transparent]getNextMarker[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]!=[backcolor=transparent] [backcolor=transparent]null[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  23. [backcolor=transparent]        nextMarker [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]URLDecoder[backcolor=transparent].[backcolor=transparent]decode[backcolor=transparent]([backcolor=transparent]objectListing[backcolor=transparent].[backcolor=transparent]getNextMarker[backcolor=transparent](),[backcolor=transparent] [backcolor=transparent]"UTF-8"[backcolor=transparent]);
  24. [backcolor=transparent]    [backcolor=transparent]}
  25. [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]while[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]objectListing[backcolor=transparent].[backcolor=transparent]isTruncated[backcolor=transparent]());


模拟文件夹功能


OSS是没有文件夹这个概念的,所有元素都是以Object来存储。创建模拟文件夹本质上来说是创建了一个size为0的Object。对于这个Object可以上传下载,只是控制台会对以”/“结尾的Object以文件夹的方式展示。
您可以通过 Delimiter 和 Prefix 参数的配合模拟出文件夹功能。Delimiter 和 Prefix 的组合效果是这样的:
  • 如果把 Prefix 设为某个文件夹名,就可以罗列以此 Prefix 开头的文件,即该文件夹下递归的所有的文件和子文件夹(目录)。文件名在Contents中显示。
  • 如果再把 Delimiter 设置为 “/” 时,返回值就只罗列该文件夹下的文件和子文件夹(目录),该文件夹下的子文件名(目录)返回在 CommonPrefixes 部分,子文件夹下递归的文件和文件夹不被显示。

提示:

假设Bucket中有4个文件: oss.jpg , fun/test.jpg , fun/movie/001.avi , fun/movie/007.avi , “/” 作为文件夹的分隔符。下面的示例展示了如何模拟文件夹功能。

列出存储空间内所有文件


当我们需要获取存储空间下的所有文件时,可以这样写:
  1. [backcolor=transparent]// 构造ListObjectsRequest请求
  2. [backcolor=transparent]ListObjectsRequest[backcolor=transparent] listObjectsRequest [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ListObjectsRequest[backcolor=transparent]([backcolor=transparent]bucketName[backcolor=transparent]);
  3. [backcolor=transparent]// 列出Object
  4. [backcolor=transparent]ObjectListing[backcolor=transparent] listing [backcolor=transparent]=[backcolor=transparent] ossClient[backcolor=transparent].[backcolor=transparent]listObjects[backcolor=transparent]([backcolor=transparent]listObjectsRequest[backcolor=transparent]);
  5. [backcolor=transparent]// 遍历所有Object
  6. [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"Objects:"[backcolor=transparent]);
  7. [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]OSSObjectSummary[backcolor=transparent] objectSummary [backcolor=transparent]:[backcolor=transparent] listing[backcolor=transparent].[backcolor=transparent]getObjectSummaries[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  8. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]objectSummary[backcolor=transparent].[backcolor=transparent]getKey[backcolor=transparent]());
  9. [backcolor=transparent]}
  10. [backcolor=transparent]// 遍历所有CommonPrefix
  11. [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"CommonPrefixs:"[backcolor=transparent]);
  12. [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] commonPrefix [backcolor=transparent]:[backcolor=transparent] listing[backcolor=transparent].[backcolor=transparent]getCommonPrefixes[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  13. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]commonPrefix[backcolor=transparent]);
  14. [backcolor=transparent]}

输出:
  1. [backcolor=transparent]Objects[backcolor=transparent]:
  2. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]movie[backcolor=transparent]/[backcolor=transparent]001.avi
  3. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]movie[backcolor=transparent]/[backcolor=transparent]007.avi
  4. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]test[backcolor=transparent].[backcolor=transparent]jpg
  5. [backcolor=transparent]oss[backcolor=transparent].[backcolor=transparent]jpg
  6. [backcolor=transparent]CommonPrefixs[backcolor=transparent]:


递归列出目录下所有文件


我们可以通过设置 Prefix 参数来获取某个目录(fun/)下所有的文件:
  1. [backcolor=transparent]// 构造ListObjectsRequest请求
  2. [backcolor=transparent]ListObjectsRequest[backcolor=transparent] listObjectsRequest [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ListObjectsRequest[backcolor=transparent]([backcolor=transparent]bucketName[backcolor=transparent]);
  3. [backcolor=transparent]listObjectsRequest[backcolor=transparent].[backcolor=transparent]setPrefix[backcolor=transparent]([backcolor=transparent]"fun/"[backcolor=transparent]);
  4. [backcolor=transparent]// 递归列出fun目录下的所有文件
  5. [backcolor=transparent]ObjectListing[backcolor=transparent] listing [backcolor=transparent]=[backcolor=transparent] ossClient[backcolor=transparent].[backcolor=transparent]listObjects[backcolor=transparent]([backcolor=transparent]listObjectsRequest[backcolor=transparent]);
  6. [backcolor=transparent]// 遍历所有Object
  7. [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"Objects:"[backcolor=transparent]);
  8. [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]OSSObjectSummary[backcolor=transparent] objectSummary [backcolor=transparent]:[backcolor=transparent] listing[backcolor=transparent].[backcolor=transparent]getObjectSummaries[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  9. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]objectSummary[backcolor=transparent].[backcolor=transparent]getKey[backcolor=transparent]());
  10. [backcolor=transparent]}
  11. [backcolor=transparent]// 遍历所有CommonPrefix
  12. [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"\nCommonPrefixs:"[backcolor=transparent]);
  13. [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] commonPrefix [backcolor=transparent]:[backcolor=transparent] listing[backcolor=transparent].[backcolor=transparent]getCommonPrefixes[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  14. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]commonPrefix[backcolor=transparent]);
  15. [backcolor=transparent]}

输出:
  1. [backcolor=transparent]Objects[backcolor=transparent]:
  2. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]movie[backcolor=transparent]/[backcolor=transparent]001.avi
  3. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]movie[backcolor=transparent]/[backcolor=transparent]007.avi
  4. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]test[backcolor=transparent].[backcolor=transparent]jpg
  5. [backcolor=transparent]CommonPrefixs[backcolor=transparent]:


列出目录下的文件和子目录


在 Prefix 和 Delimiter 结合的情况下,可以列出目录(fun/)下的文件和子目录:
  1. [backcolor=transparent]// 构造ListObjectsRequest请求
  2. [backcolor=transparent]ListObjectsRequest[backcolor=transparent] listObjectsRequest [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ListObjectsRequest[backcolor=transparent]([backcolor=transparent]bucketName[backcolor=transparent]);
  3. [backcolor=transparent]// "/" 为文件夹的分隔符
  4. [backcolor=transparent]listObjectsRequest[backcolor=transparent].[backcolor=transparent]setDelimiter[backcolor=transparent]([backcolor=transparent]"/"[backcolor=transparent]);
  5. [backcolor=transparent]// 列出fun目录下的所有文件和文件夹
  6. [backcolor=transparent]listObjectsRequest[backcolor=transparent].[backcolor=transparent]setPrefix[backcolor=transparent]([backcolor=transparent]"fun/"[backcolor=transparent]);
  7. [backcolor=transparent]ObjectListing[backcolor=transparent] listing [backcolor=transparent]=[backcolor=transparent] ossClient[backcolor=transparent].[backcolor=transparent]listObjects[backcolor=transparent]([backcolor=transparent]listObjectsRequest[backcolor=transparent]);
  8. [backcolor=transparent]// 遍历所有Object
  9. [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"Objects:"[backcolor=transparent]);
  10. [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]OSSObjectSummary[backcolor=transparent] objectSummary [backcolor=transparent]:[backcolor=transparent] listing[backcolor=transparent].[backcolor=transparent]getObjectSummaries[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  11. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]objectSummary[backcolor=transparent].[backcolor=transparent]getKey[backcolor=transparent]());
  12. [backcolor=transparent]}
  13. [backcolor=transparent]// 遍历所有CommonPrefix
  14. [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"\nCommonPrefixs:"[backcolor=transparent]);
  15. [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] commonPrefix [backcolor=transparent]:[backcolor=transparent] listing[backcolor=transparent].[backcolor=transparent]getCommonPrefixes[backcolor=transparent]())[backcolor=transparent] [backcolor=transparent]{
  16. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]commonPrefix[backcolor=transparent]);
  17. [backcolor=transparent]}

输出:
  1. [backcolor=transparent]Objects[backcolor=transparent]:
  2. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]test[backcolor=transparent].[backcolor=transparent]jpg
  3. [backcolor=transparent]CommonPrefixs[backcolor=transparent]:
  4. [backcolor=transparent]fun[backcolor=transparent]/[backcolor=transparent]movie[backcolor=transparent]/

提示:
  • 返回的结果中, ObjectSummaries 的列表中给出的是fun目录下的文件。
  • 而 CommonPrefixs 的列表中给出的是fun目录下的所有子文件夹。可以看出 fun/movie/001.avi , fun/movie/007.avi 两个文件并没有被列出来,因为它们属于fun文件夹下的movie目录。





展开
收起
青衫无名 2017-10-18 10:59:23 1552 分享 版权
0 条回答
写回答
取消 提交回答