IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【sim-storage-client】SpringBoot集成Minio与本地存储 -> 正文阅读

[Java知识库]【sim-storage-client】SpringBoot集成Minio与本地存储

sim-storage-client提供文件上传和下载功能,并集成了FTP、Minio以及本地存储,统一上传、下载接口,也支持自定义扩展存储方式。

源码地址:sim-storage-client

  • 依赖
<dependency>
    <groupId>com.yao2san</groupId>
    <artifactId>sim-storage-client</artifactId>
    <version>1.0.0</version>
</dependency>

<!--单独使用时,在pom中添加以下仓库地址-->
<repositories>
    <repository>
        <id>rdc-releases</id>
        <url>https://61c59941e74da01affdc9d7b:Swtu1HNF1phz@packages.aliyun.com/maven/repository/2170823-release-TpgdUY/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

  • 配置示例
sim:
  storage:
    # 启用存储服务
    enable: true
    # 存储类型:Minio,可选值:local、minio、ftp
    type: minio
    # minio存储配置
    minio:
      # minio地址
      endpoint: http://localhost
      # 端口
      port: 9000
      # 存储桶
      bucket: test
      # 根路径(可选,默认为空)
      path: /upload/
      # access-key
      access-key: U77bBCMYW1GVmow4
      # secret-key
      secret-key: tSiDkUNARZYhlARoUzT2STJlyYnezmG2
    # 本地存储配置  
    local:
      # 本地文件存放根目录
      path: "D:\\temp\\"
      # web访问映射前缀
      prefix: static
      # 应用地址
      url: http://localhost:8080
    # ftp存储配置
    ftp:
      # 可选ftp、sftp
      type: ftp
      # ftp服务地址
      host: 127.0.0.1
      # ftp服务端口
      port: 21
      # 根目录
      path: /data/
  • 存储类型

sim-storage-client支持以下存储类型:

类型版本要求说明
本地存储(LOCAL)支持本地文件系统、NAS文件系统以及其它任意可挂载的文件系统。
Minio存储(MINIO)>8.3Minion是一个高性能的对象存储服务,集成了它的客户端。
FTP存储(FTP)实现中。

3.5.2 上传和下载

  • 文件上传
@Autowired
private Uploader uploader;

@PostMapping("upload")
public void upload(MultipartFile file) throws IOException {

    String object = file.getOriginalFilename();

    UploadResult result = uploader.upload(file, object);

}

  • 元数据
UploadArgs args = UploadArgs.builder().build();
args.add("user-id", "1");
UploadResult result = uploader.upload(file, object,args);
  • 上传结果UploadResult** **
属性类型说明
successboolean上传成功/失败
messageString上传失败时的失败原因
objectString上传后的文件名(含路径,基于根路径)
isDirboolean是否是目录
sizelong文件大小
urlString文件访问/下载链接
uploadArgsUploadArgs上传时的参数
  • 上传事件

文件上传后,会发布一个UploadEvent 事件,您可以监听此事件做一些额外处理。

@Configuration
@Slf4j
public class UploadEventListener {
    @EventListener
    public void handler(UploadEvent event) {
        log.info("Receive upload result event, time:{}, result:{}", event.getTimestamp(), JSONObject.toJSONString(event.getSource()));
    }
}
//输出:Receive upload result event, time:1663821454180, result:{"object":"images/jars.zip","size":10066282,"success":true,"uploadArgs":{"userId":"1"},"url":"http://localhost:9000/test/images/test.png"}

  • 自动生成目录

sim-storage-client支持目录生成策略,内置3种策略:

(1) EmptyFolderPolicy :空策略,即不生成(默认)

(2) DayFolderPolicy :按天生成,每天一个目录,如20220922。

(3) MonthFolderPolicy :按月生成,每月一个目录,如202209。

您也可以自定义生成策略,只需要实现FolderPolicy 接口并将它放入Spring容器中即可:

public class CustomerFolderPolicy implements FolderPolicy {
    @Override
    public String create() {
		//TODO your code
        return "";
    }
}

@Bean
public FolderPolicy folderPolicy() {
   return new CustomerFolderPolicy();
}

  • 文件下载
@Autowired
private Downloader downloader;

@GetMapping("download")
public void download(String fileName, HttpServletResponse response) throws IOException {
    downloader.download(fileName, response.getOutputStream());
}

3.5.3 文件管理

StorageManager 提供了基础的文件管理功能,支持本地存储和Minio。

  • 通过Spring容器获取StorageManager
@Autowired
private StorageManager storageManager;
  • 查询文件
String prefix = "/images/";
//列出指定前缀的文件。如果以"/"结尾则表示列出其目录下的所有文件。
storageManager.list(prefix);

//列出指定前缀的且从/images/test.png开始之后(不包含)的文件,当文件量过多时,可基于startAfter分页。
String startAfter = "/images/test.png";
storageManager.list(prefix,startAfter);

  • 删除文件
String object= "/images/test.png";
storageManager.delete(object);
  • 文件是否存在
String object= "/images/test.png";
boolean exist = storageManager.exist(object)
  • 重命名文件
String source= "/images/test.png";
String target = "/images/test2.png";
storageManager.rename(source,target);
  • 复制文件
String source= "/images/test.png";
String target = "/images/test2.png";
storageManager.copy(source,target);
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:38:26  更:2022-09-30 00:41:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/19 4:24:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码