/oss-spring-boot-starter

本工具集成了常用的第三方对象存储平台,简化项目中使用对象存储时繁琐的集成过程,让对象存储开箱即用。

Primary LanguageJavaApache License 2.0Apache-2.0

OSS对象存储

本工具集成了常用的第三方对象存储平台,简化项目中使用对象存储时繁琐的集成过程,并针对实际使用过程中的积累,对常用方法进行封装,提供了一套标准的API,让对象存储开箱即用。

  • 源码地址

Github

Gitee

  • 目前已支持:
序号 存储器 官方地址 说明文档
1 本地存储 点击 点击
2 FTP 点击 点击
3 SFTP 点击 点击
4 阿里云 点击 点击
5 百度云 点击 点击
6 华为云 点击 点击
7 京东云 点击 点击
8 七牛云 点击 点击
9 腾讯云 点击 点击
10 Minio 点击 点击
11 又拍云 点击 点击
12 金山云 点击 点击
13 JDBC 点击 点击
14 青云 点击 点击
15 网易数帆 点击 点击
16 亚马逊 点击 点击
17 UCloud 点击 点击
18 平安云 点击 点击

新功能持续增加中,敬请期待!!!

特别说明:本地存储、SFTP、FTP三种实现方式主要基于hutool提供的FileUtilSftpFtp等相关的工具。

开始使用

jar包已推送至maven**仓库,可通过如下方式导入oss-spring-boot-starter依赖

<dependencies>
	<groupId>io.github.artislong</groupId>
    <artifactId>oss-spring-boot-starter</artifactId>
    <version>{latest.version}</version>
</dependencies>

在需要使用的Spring Bean中注入StandardOssClient对象即可。

StandardOssClient类提供统一的文件存储API,提供了如下方法:

  • 文件上传
/**
 * 上传文件,默认覆盖
 * @param is 输入流
 * @param targetName 目标文件路径
 * @return 返回文件路径
 */
default OssInfo upLoad(InputStream is,String targetName) {
    return upLoad(is,targetName,true);
}
/**
 * 上传文件
 * @param is 输入流
 * @param targetName 目标文件路径
 * @param isOverride 是否覆盖
 * @return 返回文件路径
 */
OssInfo upLoad(InputStream is,String targetName,Boolean isOverride);
  • 断点续传上传
/**
 * 断点续传
 * @param file 本地文件路径
 * @param targetName  目标文件路径
 * @return 文件信息
 */
default OssInfo upLoadCheckPoint(String file, String targetName) {
    return upLoadCheckPoint(new File(file), targetName);
}
/**
 * 断点续传
 * @param file 本地文件
 * @param targetName 目标文件路径
 * @return 文件信息
 */
OssInfo upLoadCheckPoint(File file, String targetName);
  • 文件下载
/**
 * 下载文件
 * @param os  输出流
 * @param targetName  目标文件路径
 */
void downLoad(OutputStream os,String targetName);
  • 断点续传下载
/**
 * 断点续传
 * @param localFile 本地文件路径
 * @param targetName 目标文件路径
 * @return 文件信息
 */
default void downLoadCheckPoint(String localFile, String targetName) {
    downLoadCheckPoint(new File(localFile), targetName);
}

/**
 * 断点续传
 * @param localFile 本地文件
 * @param targetName 目标文件路径
 * @return 文件信息
 */
void downLoadCheckPoint(File localFile, String targetName);
  • 删除
/**
 * 删除文件
 * @param targetName 目标文件路径
 */
void delete(String targetName);
  • 复制
/**
 * 复制文件,默认覆盖
 * @param sourceName 源文件路径
 * @param targetName 目标文件路径
 */
default void copy(String sourceName,String targetName) {
    copy(sourceName,targetName,true);
}
/**
 * 复制文件
 * @param sourceName 源文件路径
 * @param targetName 目标文件路径
 * @param isOverride 是否覆盖
 */
void copy(String sourceName,String targetName,Boolean isOverride);
  • 移动
/**
 * 移动文件,默认覆盖
 * @param sourceName 源文件路径
 * @param targetName 目标路径
 */
default void move(String sourceName,String targetName) {
    move(sourceName,targetName,true);
}
/**
 * 移动文件
 * @param sourceName 源文件路径
 * @param targetName 目标路径
 * @param isOverride 是否覆盖
 */
void move(String sourceName,String targetName,Boolean isOverride);
  • 重命名
/**
 * 重命名文件
 * @param sourceName 源文件路径
 * @param targetName 目标文件路径
 */
default void rename(String sourceName,String targetName) {
    rename(sourceName,targetName,true);
}
/**
 * 重命名文件
 * @param sourceName 源文件路径
 * @param targetName 目标路径
 * @param isOverride 是否覆盖
 */
void rename(String sourceName,String targetName,Boolean isOverride);
  • 获取文件及目录信息
/**
 * 获取文件信息,默认获取目标文件信息
 * @param targetName 目标文件路径
 * @return 文件基本信息
 */
default OssInfo getInfo(String targetName) {
    return getInfo(targetName,false);
}
/**
 * 获取文件信息
 *      isRecursion传false,则只获取当前对象信息;
 *      isRecursion传true,且当前对象为目录时,会递归获取当前路径下所有文件及目录,按层级返回
 * @param targetName 目标文件路径
 * @param isRecursion 是否递归
 * @return 文件基本信息
 */
OssInfo getInfo(String targetName,Boolean isRecursion);
  • 判断对象是否为文件
/**
 * 是否为文件
 *      默认根据路径最后一段名称是否有后缀名来判断是否为文件,此方式不准确,当存储平台不提供类似方法时,可使用此方法
 * @param targetName 目标文件路径
 * @return true/false
 */
default Boolean isFile(String targetName) {
    String name=FileNameUtil.getName(targetName);
    return StrUtil.indexOf(name,StrUtil.C_DOT)>0;
}
  • 判断对象是否为目录
/**
 * 是否为目录
 *      与判断是否为文件相反
 * @param targetName 目标文件路径
 * @return true/false
 */
default Boolean isDirectory(String targetName) {
    return !isFile(targetName);
}
  • 判断对象是否存在
/**
 * 是否存在
 * @param targetName 目标文件路径
 * @return true/false
 */
Boolean isExist(String targetName);
  • 分片上传
/**
 * 上传分片
 * @param upLoadCheckPoint 断点续传对象
 * @param partNum 分片索引
 * @return 上传结果
 */
UpLoadPartResult uploadPart(UpLoadCheckPoint upLoadCheckPoint, int partNum, InputStream inputStream);
  • 分片下载
/**
 * 下载分片
 * @param key 目标文件
 * @param start 文件开始字节
 * @param end 文件结束字节
 * @return 此范围的文件流
 */
InputStream downloadPart(String key, long start, long end);

更多API可通过在线API文档查看。

具体使用可根据实际业务需求及所采用的存储平台灵活使用。

注意: 在开启多个存储平台后,在注入操作客户端时,需通过@Qualifier注解指定Bean名称,同时,每个存储平台配置多实例时,将按照自定义名称注入。具体注入方式可通过test包路径中查看。

单元测试