diff --git a/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/DFsService.java b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/DFsService.java new file mode 100644 index 00000000..b51e9b52 --- /dev/null +++ b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/DFsService.java @@ -0,0 +1,51 @@ +package tech.powerjob.server.extension.dfs; + +import java.io.IOException; +import java.util.Optional; + +/** + * 分布式文件服务 + * + * @author tjq + * @since 2023/7/16 + */ +public interface DFsService { + + /** + * 存储文件 + * @param storeRequest 存储请求 + * @throws IOException 异常 + */ + void store(StoreRequest storeRequest) throws IOException; + + /** + * 下载文件 + * @param downloadRequest 文件下载请求 + * @throws IOException 异常 + */ + void download(DownloadRequest downloadRequest) throws IOException; + + /** + * 删除文件 + * @param fileLocation 文件位置 + * @throws IOException 异常 + */ + void delete(FileLocation fileLocation) throws IOException; + + /** + * 获取文件元信息 + * @param fileLocation 文件位置 + * @return 存在则返回文件元信息 + * @throws IOException 异常 + */ + Optional fetchFileMeta(FileLocation fileLocation) throws IOException; + + /** + * 清理 powerjob 认为“过期”的文件 + * 部分存储系统自带生命周期管理(如阿里云OSS,则不需要单独实现该方法) + * @param bucket bucket + * @param days 天数,需要清理超过 X 天的文件 + */ + default void cleanExpiredFiles(String bucket, int days) { + } +} diff --git a/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/DownloadRequest.java b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/DownloadRequest.java new file mode 100644 index 00000000..70efd4fa --- /dev/null +++ b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/DownloadRequest.java @@ -0,0 +1,20 @@ +package tech.powerjob.server.extension.dfs; + +import lombok.Data; + +import java.io.File; +import java.io.Serializable; + +/** + * download request + * + * @author tjq + * @since 2023/7/16 + */ +@Data +public class DownloadRequest implements Serializable { + + private transient File target; + + private FileLocation fileLocation; +} diff --git a/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/FileLocation.java b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/FileLocation.java new file mode 100644 index 00000000..d58a928e --- /dev/null +++ b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/FileLocation.java @@ -0,0 +1,23 @@ +package tech.powerjob.server.extension.dfs; + +import lombok.Data; + +/** + * 文件路径 + * + * @author tjq + * @since 2023/7/16 + */ +@Data +public class FileLocation { + + /** + * 存储桶 + */ + private String bucket; + + /** + * 名称 + */ + private String name; +} diff --git a/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/FileMeta.java b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/FileMeta.java new file mode 100644 index 00000000..6e15155b --- /dev/null +++ b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/FileMeta.java @@ -0,0 +1,26 @@ +package tech.powerjob.server.extension.dfs; + +import lombok.Data; + +import java.util.Map; +import java.util.Objects; + +/** + * FileMeta + * + * @author tjq + * @since 2023/7/16 + */ +@Data +public class FileMeta { + + /** + * 文件大小 + */ + private final long length; + + /** + * 元数据 + */ + private Map metaInfo; +} diff --git a/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/StoreRequest.java b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/StoreRequest.java new file mode 100644 index 00000000..b07581e3 --- /dev/null +++ b/powerjob-server/powerjob-server-extension/src/main/java/tech/powerjob/server/extension/dfs/StoreRequest.java @@ -0,0 +1,20 @@ +package tech.powerjob.server.extension.dfs; + +import lombok.Data; + +import java.io.File; +import java.io.Serializable; + +/** + * StoreRequest + * + * @author tjq + * @since 2023/7/16 + */ +@Data +public class StoreRequest implements Serializable { + + private transient File localFile; + + private FileLocation fileLocation; +}