小工具知识网

当前位置: 首页 > 行业知识 > springboot对接minio的webhook全过程

行业知识

springboot对接minio的webhook全过程

2026-11-15 18:57:48 来源:互联网转载

前言

近日需要将minio的apache2.0版本给用起来,顺便要完善一下原有的文件上传管理系统,其中很重要的一点是,在原有客户端直传的基础上,再添加 minio 的上传回调给服务端做后续处理。

本文重点在于,介绍整个minio与springboot对接webhook过程。

ps:minio-2021-04-22,mc-2021-04-22 是我从源代码编译出来的最后一个apache2.0版本,无视即可,可以直接从官网下载再新版—除非你也想折腾。

minio的启动以及账号密码设置

启动脚本如下:

#!/bin/shmkdir uploadsmkdir configstouch log.logexport MINIO_ROOT_USER='minio' ##这是管理账号,请根据实际自行设定export MINIO_ROOT_PASSWORD='123456' ##这是密码,请根据实际自行设定export MINIO_BROWSER=onnohup ./minio-2021-04-22 server --address ":9000"  ./uploads >> log.log 2>&1 &## :9000 表示监听端口9000, ./uploads 指定当前文件夹下面的子文件夹 uploads为文件存储目录。tail -f log.log

先进行启动:

那么来了,

使用mc来进行管理。首先要明确一点就是:

mc 第一次启动时不知道你的minio实例在哪里的,你需要指定,设置一下minio实例以及账号密码,例如:

## -- 首先,需要设置 别名--- 就是如何访问某个minio实例,例如:mc alias set myminio https://myminio.example.net minioadminuser minioadminpassword具体到本文提到的服务,那就是:./mc-2021-04-22 alias set myminio http://127.0.0.1:9000 'minio' '123456'

ps:切记!!!只有你指定了具体的minio链接方式才能对minio进行管理的。

好了,看看是不是有webhook设置了:

./mc-2021-04-22 admin config get myminio  notify_webhook

如果没有设置过的话可以看到:

notify_webhook enable=off endpoint= auth_token= queue_limit=0 queue_dir= client_cert= client_key=

在对minio设置webhook之前,切回到springboot,我们先写一段代码用于接收minio的调用,注意,必须能够访问到的,否则后续的步骤是走不下去的

springBoot实际接收action

伪代码如下:

@Api(tags="上传接口")@Controller("/api/appUpload")@RequestMapping(value = "/api/appUpload",produces = "application/json; charset=utf-8")public class AppUploadController {    private static final String logName="文件控制器";    private static final Logger logger= LoggerFactory.getLogger(logName);    /*****     * 规则:     * 例如,如果是从minio过来的webhook,就用:     * /webhooks/minio/uploadedFinish 这些     * aliyun的用:     * /webhooks/ali/uploadedFinish     * ****/    @ApiOperation(value = "webhook回调")    @RequestMapping(value = "/webhooks/{uploadType}/{hookName}",            method = RequestMethod.POST)    @ResponseBody    public OpResult webhooks(            HttpServletRequest request            , HttpServletResponse response            ,@PathVariable("uploadType") String uploadType            ,@PathVariable("hookName") String hookName            ,@RequestBody HashMap params    ) {        if(params==null||params.size()            return OpResult.success("");        }        String auth=request.getHeader("Authorization");        //显示结果:uploadType:minio,hookName:uploadFinish,auth:Bearer test        logger.info("uploadType:{},hookName:{},auth:{}",uploadType,hookName,auth);        logger.info("{}", JSONObject.toJSONString(params));        if(uploadType.equalsIgnoreCase("minio")){        /****TODO:****/                  }        return OpResult.success();    }}uploadType}/{hookName}minio实例名称} notify_webhook:{webhook规则名称} endpoint="{回调的url地址,必须确保能够访问到}" auth_token="{这算是身份密令了与业务系统有关自行设置}" queue_dir="{对回调请求进行持久化,保存到的文件目录,必须为绝对路径,不接受相对路径}" queue_limit="{最大保存多少个回调请求}"受管控的minio实例名称}/{bucket名称} arn:minio:sqs::{刚才你添加的规则名称}:webhook -p --event {可以是put,delete等} --suffix '.*'(适用的后缀名,可以设置 .* 表示全部)        "EventName": "s3:ObjectCreated:Put",        "Records": [{            "eventVersion": "2.0",            "eventSource": "minio:s3",            "awsRegion": "",            "eventTime": "2024-04-03T09:34:01.211Z",            "eventName": "s3:ObjectCreated:Put",            "userIdentity": {"principalId": "fileadmin"},            "requestParameters": {"principalId": "fileadmin", "region": "", "sourceIPAddress": "127.0.0.1"},            "responseElements": {                "content-length": "0",                "x-amz-request-id": "17C2BB62C324CD16",                "x-minio-deployment-id": "fe30defd-c85c-48a4-adb5-7482c30696d4",                "x-minio-origin-endpoint": "http://127.0.0.1:9000"            },            "s3": {                "s3SchemaVersion": "1.0",                "configurationId": "Config",                "bucket": {"name": "files", "ownerIdentity": {"principalId": "fileadmin"}, "arn": "arn:aws:s3:::files"},                "object": {                    "key": "favicon.png",                    "size": 2423,                    "eTag": "7d1e98521f3bbf904511cacf4517d55d",                    "contentType": "image/png",                    "userMetadata": {"content-type": "image/png"},                    "sequencer": "17C2BB62C34659DD"                }            },            "source": {                "host": "127.0.0.1",                "port": "",                "userAgent": "MinIO (linux; amd64) minio-go/v7.0.11 mc-2021-04-22/DEVELOPMENT.GOGET"            }        }],        "Key": "files/favicon.png"    }

上一篇:微密圈下载指南,轻松获取的步骤与方法

下一篇:HTTP有什么缺陷,HTTPS是怎么解决的