oss对象存储实际没有文件夹的概念,只是有些可视化工具模拟的文件夹功能,如果手动操作可能导致一些问题。
接口listObjects
该接口可以获取指定前缀目录下的文件列表,下面代码copy自阿里云oss官方文档。
注意:该接口需要使用aliyun-sdk-oss
2.3.0以上版本,使用aliyun-openservices
2.0.4版本可能没有该接口
// 构造ListObjectsRequest请求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
// "/" 为文件夹的分隔符
listObjectsRequest.setDelimiter("/");
// 列出fun目录下的所有文件和文件夹
listObjectsRequest.setPrefix("fun/");
ObjectListing listing = ossClient.listObjects(listObjectsRequest);
// 遍历所有Object
System.out.println("Objects:");
//OSSobjectSummary下包含目录下所有的文件,不包含子目录
for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
System.out.println(objectSummary.getKey());
}
// 遍历所有CommonPrefix
System.out.println("\nCommonPrefixs:");
for (String commonPrefix : listing.getCommonPrefixes()) {
System.out.println(commonPrefix);
}
输出:
Objects:
fun/test.jpg
CommonPrefixs:
fun/movie/
但是在使用过程中从OSSobjectSummary获取的文件出现了空目录,如:aaa/bbb/和aaa/bbb/说明文档.doc两个文件。
出现这种问题的原因是aaa/bbb/目录是手动创建的,被认为是一个空的object了,如果使用putFile上传文件接口上传文件,是不会出现这个问题的,但是为了程序健壮性,获取文件列表时可以对空目录进行过滤