oss管理

1.获取指定目录下的一级目录和文件,入参的目录后面不要加上/,

调用例如 fileFolder(client,"testYqt");   这个目录名称是从bucket后面开始的,如果是整个bucket的,入参就为空

public static void fileFolder(OSSClient client,String fileName) {
// 构造ListObjectsRequest请求。
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
// 设置正斜线(/)为文件夹的分隔符。
listObjectsRequest.setDelimiter("/");
// 设置prefix参数来获取fun目录下的所有文件。
if(StringUtils.isNullOrEmpty(fileName)) {
listObjectsRequest.setPrefix(fileName);
}else {
listObjectsRequest.setPrefix(fileName+"/");
}
ObjectListing listing = client.listObjects(listObjectsRequest);
List<OSSObjectSummary> objectSummaries = listing.getObjectSummaries();
for (String commonPrefix : listing.getCommonPrefixes()) {
String newCommonPrefix = commonPrefix.substring(0, commonPrefix.length() - 1);
String[] s = newCommonPrefix.split("/");
System.out.println("目录名==>"+s[(s.length-1)]);
}
for (OSSObjectSummary s : objectSummaries) {
if("/".equals(s.getKey().substring(s.getKey().length()-1))) {
continue;
}
ObjectAcl objectAcl = client.getObjectAcl(bucketName, s.getKey());
System.out.println("文件名==>" + s.getKey().substring(s.getKey().indexOf("/")+1)+"==>"+getPrintSize(s.getSize())+"=="+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(s.getLastModified())+"=="+objectAcl.getPermission().toString());
}

获取到的文件大小的单位为B,要进行转换,跟oss客户端的结果显示是一样的

public static String getPrintSize(long size) {
//如果字节数少于1024,则直接以B为单位
long flag=size;
if (flag < 1024) {
return String.valueOf(size) + "B";
} else {
flag = flag / 1024;
}
if (flag < 1024) {
return String.valueOf(new BigDecimal((float)size/1024).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()) + "KB";
} else {
size=flag;
flag = flag / 1024;
}
if (flag < 1024) {
return String.valueOf(new BigDecimal((float)size/1024).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()) + "MB";
} else {
return String.valueOf(new BigDecimal((float)size/(1024*1024)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()) + "GB";
}
}

 

posted @ 2020-07-03 10:06  幽魂~~  阅读(229)  评论(0编辑  收藏  举报