Browse Source

Pull request #1114: REPORT-117434 && REPORT-128310 fix: 第三方依赖升级;虚拟目录识别变成一个配置项

Merge in PG/plugin-repository-s3 from ~AFLY/plugin-repository-s3:release/11.0 to release/11.0

* commit 'c28babacf822df7727ddcbbb69a344de1fec4616':
  REPORT-128310 fix: 虚拟目录识别变成一个配置项
  REPORT-117434 fix: 第三方依赖升级
release/11.0
Afly-储泓飞 6 months ago
parent
commit
6cdfcab3bf
  1. BIN
      lib/ion-java-1.0.2.jar
  2. BIN
      lib/ion-java-1.11.9.jar
  3. BIN
      lib/jackson-annotations-2.14.1.jar
  4. BIN
      lib/jackson-annotations-2.17.2.jar
  5. BIN
      lib/jackson-core-2.14.1.jar
  6. BIN
      lib/jackson-core-2.17.2.jar
  7. BIN
      lib/jackson-databind-2.14.1.jar
  8. BIN
      lib/jackson-databind-2.17.2.jar
  9. BIN
      lib/jackson-dataformat-cbor-2.14.1.jar
  10. BIN
      lib/jackson-dataformat-cbor-2.17.2.jar
  11. BIN
      lib/jmespath-java-1.11.801.jar
  12. BIN
      lib/jmespath-java-1.12.762.jar
  13. 3
      plugin.xml
  14. 15
      src/main/java/com/fanruan/fs/s3/repository/core/S3Config.java
  15. 30
      src/main/java/com/fanruan/fs/s3/repository/core/S3ResourceRepository.java

BIN
lib/ion-java-1.0.2.jar

Binary file not shown.

BIN
lib/ion-java-1.11.9.jar

Binary file not shown.

BIN
lib/jackson-annotations-2.14.1.jar

Binary file not shown.

BIN
lib/jackson-annotations-2.17.2.jar

Binary file not shown.

BIN
lib/jackson-core-2.14.1.jar

Binary file not shown.

BIN
lib/jackson-core-2.17.2.jar

Binary file not shown.

BIN
lib/jackson-databind-2.14.1.jar

Binary file not shown.

BIN
lib/jackson-databind-2.17.2.jar

Binary file not shown.

BIN
lib/jackson-dataformat-cbor-2.14.1.jar

Binary file not shown.

BIN
lib/jackson-dataformat-cbor-2.17.2.jar

Binary file not shown.

BIN
lib/jmespath-java-1.11.801.jar

Binary file not shown.

BIN
lib/jmespath-java-1.12.762.jar

Binary file not shown.

3
plugin.xml

@ -5,12 +5,13 @@
<main-package>com.fanruan.fs</main-package>
<active>yes</active>
<hidden>no</hidden>
<version>1.4.4</version>
<version>1.4.5</version>
<env-version>11.0~11.0</env-version>
<jartime>2023-03-14</jartime>
<vendor>richie</vendor>
<description><![CDATA[使用支持S3协议的云存储文件系统作为文件服务器。]]></description>
<change-notes><![CDATA[
[2023-07-25]第三方组件升级。 <br/>
[2024-03-13]国际化更新 <br/>
[2024-03-13]国际化更新 <br/>
[2023-11-21]小文件不使用分片上传, 新增preserveMetadata后台配置。 <br/>

15
src/main/java/com/fanruan/fs/s3/repository/core/S3Config.java

@ -44,6 +44,9 @@ public class S3Config extends CommonRepoConfig {
@Identifier("preserveMetadata")
private Conf<Boolean> preserveMetadata = HolderKit.simple(true);
@Identifier("openVirtualDirectory")
private Conf<Boolean> openVirtualDirectory = HolderKit.simple(false);
@GetConfig("endPoint")
public String getEndPoint() {
return endPoint.get();
@ -124,6 +127,16 @@ public class S3Config extends CommonRepoConfig {
this.preserveMetadata.set(preserveMetadata);
}
@GetConfig("openVirtualDirectory")
public boolean isOpenVirtualDirectory() {
return openVirtualDirectory.get();
}
@SetConfig("openVirtualDirectory")
public void setOpenVirtualDirectory(boolean openVirtualDirectory) {
this.openVirtualDirectory.set(openVirtualDirectory);
}
@Override
public void update(String key) {
super.update(key);
@ -137,6 +150,7 @@ public class S3Config extends CommonRepoConfig {
this.setSignerOverride(newConfig.getSignerOverride());
this.setMaxConnections(newConfig.getMaxConnections());
this.setPreserveMetadata(newConfig.isPreserveMetadata());
this.setOpenVirtualDirectory(newConfig.isOpenVirtualDirectory());
}
}
@ -151,6 +165,7 @@ public class S3Config extends CommonRepoConfig {
cloned.signerOverride = (Conf<String>) signerOverride.clone();
cloned.maxConnections = (Conf<Integer>) maxConnections.clone();
cloned.preserveMetadata = (Conf<Boolean>) preserveMetadata.clone();
cloned.openVirtualDirectory = (Conf<Boolean>) openVirtualDirectory.clone();
return cloned;
}
}

30
src/main/java/com/fanruan/fs/s3/repository/core/S3ResourceRepository.java

@ -59,6 +59,9 @@ public class S3ResourceRepository extends BaseResourceRepository {
private final boolean preserveMetadata;
// 是否将创建a/b/c.txt时的a/b/识别成一个存在的目录
private final boolean openVirtualDirectory;
private final AmazonS3 s3;
private final String bucket;
@ -86,6 +89,7 @@ public class S3ResourceRepository extends BaseResourceRepository {
this.s3 = amazonS3ClientBuilder.build();
this.bucket = config.getBucket();
this.preserveMetadata = config.isPreserveMetadata();
this.openVirtualDirectory = config.isOpenVirtualDirectory();
}
@Override
@ -99,6 +103,7 @@ public class S3ResourceRepository extends BaseResourceRepository {
ObjectMetadata metadata = s3.getObjectMetadata(bucket, path);
return s3Object2FileEntry(metadata, path);
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
LogKit.info("{} not exist!", path);
}
if (!path.endsWith(DELIMITER)) {
@ -330,7 +335,16 @@ public class S3ResourceRepository extends BaseResourceRepository {
@Override
public boolean exist(String path) {
return fileExist(path) || (!path.endsWith(DELIMITER) && dirExist(path)) || isParentPathAbsent(path);
if (fileExist(path)) {
return true;
}
if ((!path.endsWith(DELIMITER) && dirExist(path))) {
return true;
}
if (openVirtualDirectory) {
return isVirtualDirectory(path);
}
return false;
}
private boolean fileExist(String path) {
@ -352,9 +366,9 @@ public class S3ResourceRepository extends BaseResourceRepository {
}
/**
* 如果存在文件创建了但是其父目录没有创建的场景为其递归创建对象返回创建结果
* 是否将创建对象的前缀比如a/b/c.txt时的a/b/识别成一个存在的目录.
*/
private boolean isParentPathAbsent(String path) {
private boolean isVirtualDirectory(String path) {
if (path.startsWith(DELIMITER)) {
path = path.substring(1);
}
@ -364,7 +378,8 @@ public class S3ResourceRepository extends BaseResourceRepository {
ObjectListing objectListing = s3.listObjects(
new ListObjectsRequest()
.withBucketName(bucket)
.withPrefix(path));
.withPrefix(path)
.withDelimiter(DELIMITER));
for (S3ObjectSummary summary : objectListing.getObjectSummaries()) {
if (summary.getKey().startsWith(path + DELIMITER)) {
return createDirectory(path);
@ -416,7 +431,12 @@ public class S3ResourceRepository extends BaseResourceRepository {
//是文件
return false;
} else {
return dirExist(path) || isParentPathAbsent(path);
if (dirExist(path)) {
return true;
} else {
// 是一个虚拟的目录
return openVirtualDirectory && isVirtualDirectory(path);
}
}
}

Loading…
Cancel
Save