minio之【设置webhook实现文件上传回调】

背景

项目中需要对接OSS存储平台实现文件存储方案,最终选择了开源的minio作为基础平台。开发文件上传功能时发现如果文件先传到业务系统,再通过业务系统调用minio的api透传到minio平台的话,文件需要在网络中传输两次,比较低效。虽然一般情况下业务系统可能和minio平台在一个内网环境,从业务系统到minio这部分文件传输可以走内网环境,不占用公司公网带宽,但是始终是一种低效的方案。所以开始研究minio的回调方案,经过研究发现如下文件直传oss的方案行得通,即:首先业务系统提供文件上传链接,用户将文件放入文件上传链接的参数中让文件直传oss,minio回调业务系统服务器告知文件已到达,最后业务系统根据文件信息做相关业务处理。废话不多说直接上干货。

--------------------------MinIO Admin Client安装(windows)-------------------------

  • 其他操作系统请看这里
  1. 下载exe文件:https://dl.min.io/client/mc/release/windows-amd64/mc.exe
  2. 【非必要步骤】配置环境变量,将mc.exe路径设置到path变量中,如果没有设置环境变量,需要在mc.exe所在目录下执行mc命令。
    exe文件路径
    设置mc环境变量
  3. 测试
mc -v

查看mc版本
mc安装完成。

--------------------------配置minio服务器--------------------------

  1. 直接上脚本
rem ---------step1:为minio服务器设置别名----------------
mc alias set minio_pro http://192.168.1.10:19000 admin admin

rem ---------step2:配置 webhook---------
rem ---------notice:endpoint 对于 minio server 必须网络可达,否则 mc 会报异常 (one or more targets are offline) error---------
mc admin config set minio_pro/ notify_webhook:fs_file_upload_callback_20230525 endpoint='你业务系统的回调接口地址' comment='描述' queue_limit=10000 queue_dir='/home/minio-events'

rem ---------step3:重启 minio server---------
mc admin service restart minio_pro/

注意:

  • step1中将http://192.168.1.10:19000 admin admin换成你自己的minio服务器地址,用户名和密码;minio_pro就是你设置的minio服务器别名。
  • step2中minio_pro换成在step1中设置的别名;fs_file_upload_callback_20230525是你的webhook名称,自己定义就行。
  • step3minio_pro为step1中设置的别名。
  1. 查看配置信息
rem ---------step4:check config content---------
mc admin info --json minio_pro/

查看配置信息

--------------------------桶配置--------------------------

  1. 登录minio console

  2. 进入某个对象桶的桶配置
    在这里插入图片描述

  3. 添加事件(手动)
    添加事件步骤
    至此,文件上传/下载/删除的回调事件配置完成,接下来需要做的就是在业务系统中实现回调接口的逻辑了,回调接口也就是minio服务器配置脚本中step2的endpoint。回调接口的实现可以通过边调试边开发的方式进行,根据回调入参组织自己的业务逻辑。一般为了方便业务处理,会在生成文件上传链接(minio的另一个功能,有必要的话我可以在另一篇文章分享)的时候加入自己的一些业务标识,方便业务处理。

    这里po一张我自己开发时候的入参数据结构

文件上传事件回调入参

  1. 添加事件(自动)
  • 依赖
<!--minio-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.0.3</version>
    <exclusions>
        <exclusion>
            <artifactId>okio</artifactId>
            <groupId>com.squareup.okio</groupId>
        </exclusion>
        <exclusion>
            <artifactId>okhttp</artifactId>
            <groupId>com.squareup.okhttp3</groupId>
        </exclusion>
    </exclusions>
</dependency>
  • 主要逻辑代码(java)
    先遍历所有minio的对象桶,然后执行以下逻辑:
public void setMinioBucketwebHook(String bucket, OssHandler ossHandler) {
    //设置webhook
    List<EventType> eventList = new LinkedList<>();
    eventList.add(EventType.OBJECT_CREATED_PUT);
    QueueConfiguration queueConfiguration = new QueueConfiguration();
    queueConfiguration.setQueue("arn:minio:sqs::fs_file_upload_callback_20230525:webhook");
    queueConfiguration.setEvents(eventList);
    List<QueueConfiguration> queueConfigurationList = new LinkedList<>();
    queueConfigurationList.add(queueConfiguration);
    NotificationConfiguration configSet = new NotificationConfiguration();
    configSet.setQueueConfigurationList(queueConfigurationList);
    ossHandler.setMinioWebHook(configSet, bucket);
  }

ossHandler.setMinioWebHook调用的是MinioClient.setBucketNotification方法,MinioClient类在上面的依赖包中。

--------------------------分割线--------------------------

以上是关于minio事件回调的分享,更多细节请查看minio官网
码字不易,望君一键三连,skr

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用MinIO Java客户端来实现文件上传和下载。MinIO是一个基于对象存储的开源项目,可以提供高性能的文件存储和访问。 首先,你需要在你的Java项目中添加MinIO Java客户端的依赖。你可以在Maven或者Gradle配置文件中加入以下依赖: Maven: ```xml <dependencies> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.1.0</version> </dependency> </dependencies> ``` Gradle: ```groovy dependencies { implementation 'io.minio:minio:8.1.0' } ``` 接下来,你需要连接到MinIO服务器并进行认证。你可以使用以下代码完成: ```java import io.minio.MinioClient; public class MinioExample { public static void main(String[] args) { try { // 创建MinIO客户端对象 MinioClient minioClient = new MinioClient("http://your-minio-server-url", "access-key", "secret-key"); // 检查存储桶是否存在,如果不存在则创建 boolean isExist = minioClient.bucketExists("your-bucket"); if (!isExist) { minioClient.makeBucket("your-bucket"); } // 上传文件 minioClient.putObject("your-bucket", "your-object-name", "/path/to/your-file"); // 下载文件 minioClient.getObject("your-bucket", "your-object-name", "/path/to/save-file"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,你需要替换以下参数: - `your-minio-server-url`:MinIO服务器的URL地址。 - `access-key`:你的MinIO访问密钥。 - `secret-key`:你的MinIO密钥。 - `your-bucket`:存储桶的名称。 - `your-object-name`:对象的名称。 - `/path/to/your-file`:待上传的文件路径。 - `/path/to/save-file`:下载文件保存的路径。 通过上述代码,你可以使用MinIO Java客户端实现文件上传和下载。希望对你有帮助!如有任何问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值