diff --git a/src/main/java/com/fanruan/fs/s3/repository/core/S3RepositoryFactory.java b/src/main/java/com/fanruan/fs/s3/repository/core/S3RepositoryFactory.java index 2aecad2..5de506c 100644 --- a/src/main/java/com/fanruan/fs/s3/repository/core/S3RepositoryFactory.java +++ b/src/main/java/com/fanruan/fs/s3/repository/core/S3RepositoryFactory.java @@ -40,6 +40,7 @@ public class S3RepositoryFactory extends ConfigRepositoryFactory { @Override public boolean verifyConfig(S3Config config) { + AmazonS3 s3 = null; try { BasicAWSCredentials credentials = new BasicAWSCredentials(config.getAccessKeyId(), config.getPassword()); AmazonS3ClientBuilder amazonS3ClientBuilder = AmazonS3ClientBuilder.standard() @@ -57,11 +58,15 @@ public class S3RepositoryFactory extends ConfigRepositoryFactory { clientConfiguration.setProtocol(Protocol.HTTP); } amazonS3ClientBuilder = amazonS3ClientBuilder.withClientConfiguration(clientConfiguration); - AmazonS3 s3 = amazonS3ClientBuilder.build(); + s3 = amazonS3ClientBuilder.build(); s3.listObjects(config.getBucket()); } catch (Exception e) { LogKit.error(e.getMessage(), e); return false; + } finally { + if (s3 != null) { + s3.shutdown(); + } } return true; } diff --git a/src/main/java/com/fanruan/fs/s3/repository/core/S3ResourceRepository.java b/src/main/java/com/fanruan/fs/s3/repository/core/S3ResourceRepository.java index 614edec..21e5d7b 100644 --- a/src/main/java/com/fanruan/fs/s3/repository/core/S3ResourceRepository.java +++ b/src/main/java/com/fanruan/fs/s3/repository/core/S3ResourceRepository.java @@ -99,15 +99,15 @@ public class S3ResourceRepository extends BaseResourceRepository { ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(bucket) .withPrefix(dir).withDelimiter(DELIMITER); ObjectListing objectListing = s3.listObjects(listObjectsRequest); - collectFileEntry(result, objectListing); + collectFileEntry(dir, result, objectListing); while (objectListing.isTruncated()) { objectListing = s3.listNextBatchOfObjects(objectListing); - collectFileEntry(result, objectListing); + collectFileEntry(dir, result, objectListing); } return result.toArray(new FineFileEntry[0]); } - private void collectFileEntry(List result, ObjectListing objectListing) { + private void collectFileEntry(String dir, List result, ObjectListing objectListing) { for (S3ObjectSummary summary : objectListing.getObjectSummaries()) { String key = summary.getKey(); if (!key.endsWith(DELIMITER)) { @@ -115,9 +115,11 @@ public class S3ResourceRepository extends BaseResourceRepository { } } for (String prefix : objectListing.getCommonPrefixes()) { - FineFileEntry entry = new FineFileEntry(prefix); - entry.setDirectory(true); - result.add(entry); + if (StringUtils.isNotEmpty(prefix.substring(dir.length()).replaceAll(DELIMITER, StringUtils.EMPTY))) { + FineFileEntry entry = new FineFileEntry(prefix); + entry.setDirectory(true); + result.add(entry); + } } } @@ -319,7 +321,11 @@ public class S3ResourceRepository extends BaseResourceRepository { result.add(key.substring(key.lastIndexOf(DELIMITER) + 1)); } for (String prefix : objectListing.getCommonPrefixes()) { - result.add(prefix.substring(prefix.lastIndexOf(DELIMITER) + 1)); + if (StringUtils.isNotEmpty(prefix.substring(dir.length()).replaceAll(DELIMITER, StringUtils.EMPTY))) { + String[] arr = prefix.split(DELIMITER); + String name = arr[arr.length - 1] + DELIMITER; + result.add(name); + } } }