diff --git a/环境/安装教程/Docker 2375端口开启外网访问.md b/环境/安装教程/Docker 2375端口开启外网访问.md index 7727419..3d4a2c9 100644 --- a/环境/安装教程/Docker 2375端口开启外网访问.md +++ b/环境/安装教程/Docker 2375端口开启外网访问.md @@ -19,7 +19,18 @@ esc :wq保存退出 然后重启docker服务 ```shell -sudo systemctl daemon-reload -sudo systemctl restart docker.service +systemctl daemon-reload && systemctl restart docker ``` +然后直接在命令行客户端输入如下命令,IP地址改为自己的 + + +``` +curl http://IP地址:2375/version +``` + +或者在浏览器直接访问,IP地址改为自己的 + +``` +http://IP地址:2375/version +``` diff --git a/环境/安装教程/Docker开放2375端口.md b/环境/安装教程/Docker开放2375端口.md deleted file mode 100644 index 136e5d5..0000000 --- a/环境/安装教程/Docker开放2375端口.md +++ /dev/null @@ -1,62 +0,0 @@ - - -开启端口命令 (--permanent永久生效,没有此参数重启后失效) - -``` -firewall-cmd --zone=public --add-port=2375/tcp --permanent -``` - -重新载入 - -``` -firewall-cmd --reload -``` - -使用 vim 编辑docker服务配置文件 - -``` -vim /lib/systemd/system/docker.service -``` - -找到如下配置行 - -``` -ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -``` - -将其注释掉或者直接删除,替换成下面的配置行.然后保存退出 - -``` -ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -``` - -重新加载docker配置并重启服务 - -``` -systemctl daemon-reload && systemctl restart docker -``` - -然后直接在命令行客户端输入如下命令,IP地址改为自己的 - - -``` -curl http://IP地址:2375/version -``` - -或者在浏览器直接访问,IP地址改为自己的 - -``` -http://IP地址:2375/version -``` - - -```xml -{ - "insecure-registries": [ - "10.211.55.2:8082" - ], - "registry-mirrors": [ - "10.211.55.2:8082" - ] -} -``` \ No newline at end of file diff --git a/环境/Docker-Compose/Docker compose 安装Gitea.md b/环境/安装教程/Gitea.md similarity index 100% rename from 环境/Docker-Compose/Docker compose 安装Gitea.md rename to 环境/安装教程/Gitea.md diff --git a/环境/安装教程/Minio.md b/环境/安装教程/Minio.md index 855186b..6174216 100644 --- a/环境/安装教程/Minio.md +++ b/环境/安装教程/Minio.md @@ -1,4 +1,97 @@ -```shell +## MinIO是什么? + +![](https://lsky.hhdxw.top/imghub/2024/01/image-202401101704861743.png) + +官方解释:MinIO 是一个基于Apache License v2.0开源协议的[对象存储](https://cloud.tencent.com/product/cos?from_column=20065&from=20065)服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 + +MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。 + +## MinIO有哪些优势 + +### 1. 开发文档全面 + +MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。。 + +官网文档地址:https://docs.min.io/cn/ + +### 2.高性能 + +MinIO号称是目前速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s。对象存储可以作为主存储层,用来处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。 + +MinIO用作云原生应用程序的主要存储,和传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。 + +### 3.容器化集成方便 + +MinIO提供了与k8s、etcd、docker等主流容器化技术深度集成方案。 + +## 安装MinIo服务 + +想要安装Minio有两种方案,第一种是直接在服务器上安装,还有一种是使用Docker快速部署。 + +官方文档:https://www.minio.org.cn/docs/cn/minio + +### 直接安装 + +安装包下载页面:https://dl.min.io/server/minio/release/,我们需要选择好对应架构和系统的安装包,比如Ubuntu/Debian系统下,我们可以像这样安装: + +```sh +wget https://dl.min.io/server/minio/release/linux-amd64/minio_20230831153116.0.0_amd64.deb -O minio.deb +sudo dpkg -i minio.deb +``` + +在CentOS/Redhat(RHEL)系统下,可以像这样安装: + +```sh +wget https://dl.min.io/server/minio/release/linux-amd64/minio-20230831153116.0.0.x86_64.rpm -O minio.rpm +sudo dnf install minio.rpm +``` + +安装完成后,我们需要创建一个用于存放minio文件数据的目录: + +```sh +sudo mkdir /mnt/minio +``` + +然后创建一个minio使用的用户,并为此用户分配对应目录的访问权限: + +```sh +groupadd -r minio-user +useradd -M -r -g minio-user minio-user +chown minio-user:minio-user /mnt/minio +``` + +接着我们需要创建Minio的配置文件: + +```sh +sudo vim /etc/default/minio +``` + +编写以下内容到配置文件中: + +```properties +#系统管理员账号和密码 +MINIO_ROOT_USER=minio +MINIO_ROOT_PASSWORD=password +#设置用于存储数据的目录 +MINIO_VOLUMES="/mnt/minio" +#项目接口访问地址 +MINIO_SERVER_URL="http://0.0.0.0:9000" +#配置其他选项,比如后台管理系统的地址 +MINIO_OPTS="--console-address 0.0.0.0:9090" +``` + +配置完成之后就可以启动Minio服务了: + +```sh +sudo systemctl enable minio.service +sudo systemctl start minio.service +``` + +### 使用Docker安装 + +对于各位小伙伴本地开发测试,这里更推荐使用Docker镜像安装,非常简单快捷,本地安装好Docker客户端之后,只需要执行以下命令就能快速部署: + +```sh docker run -p 9000:9000 -p 9090:9090 --name minio \ -d --restart=always \ -e "MINIO_ACCESS_KEY=minio" \ @@ -6,4 +99,111 @@ docker run -p 9000:9000 -p 9090:9090 --name minio \ -v database:/data \ minio/minio server \ /data --console-address ":9090" -address ":9000" +``` + +非常方便快捷。 + +------ + +## 使用Java操作对象存储 + +前面我们搭建好了对象存储服务,接着就可以开始愉快地使用了。 + +### 基本使用 + +Minio已经为我们提供了封装好的依赖,我们只需要直接使用即可: + +```xml + + io.minio + minio + 8.3.9 + +``` + +接着我们需要创建一个Minio客户端用于访问对象存储服务器: + +```java +MinioClient client = MinioClient.builder() + .endpoint("http://localhost:9000") //对象存储服务地址,注意是9000那个端口 + .credentials("minio", "password") //账户直接使用管理员 + .build(); +``` + +对于Java的相关操作,可以说非常全面,包含对桶的操作、对象操作等等,文档地址:https://www.minio.org.cn/docs/cn/minio/linux/developers/java/API.html,这里我们先演示一下文件上传: + +```java +//首先找到我们需要上传的文件 +File file = new File("/Users/nagocoler/Downloads/test.jpg"); +//构造一个输入流用于文件传输 +FileInputStream stream = new FileInputStream(file); +//填写上传的相关参数,使用PutObjectArgs的Builder来完成 +PutObjectArgs put = PutObjectArgs.builder() + .bucket("test") //设置需要上传的桶名称 + .object("666.jpg") //设置上传后保存的文件名称 + .stream(stream, file.length(), -1) //配置流以及大小还有分片大小 + .build(); +client.putObject(put); //使用putObject方法完成上传操作 +``` + +这样就可以将文件上传到对象存储服务器中了。 + +接着是下载文件: + +```java +//填写下载相关的参数,使用GetObjectArgs来完成 +GetObjectArgs get = GetObjectArgs.builder() + .bucket("test") //设置需要下载的桶名称 + .object("666.jpg") //设置下载后保存的文件名称 + .build(); +GetObjectResponse response = client.getObject(get); +//使用输出流保存下载的文件到本地 +FileOutputStream stream = new FileOutputStream("/Users/nagocoler/Downloads/download.png"); +stream.write(response.readAllBytes()); +stream.close(); +``` + +最后是删除桶里的文件: + +```java +RemoveObjectArgs remove = RemoveObjectArgs.builder() + .bucket("test") //设置需要删除文件的桶名称 + .object("666.jpg") //设置删除的文件名称 + .build(); +client.removeObject(remove); //删就完事 +``` + +### 服务器文件上传和下载 + +实例代码: + +```java +@RestController +@RequestMapping("/") +public class FileController { + + @Resource + MinioClient client; + + @PostMapping("upload") + public String upload(@RequestParam("file") MultipartFile file) throws Exception { + InputStream stream = file.getInputStream(); + String name = UUID.randomUUID().toString(); + PutObjectArgs args = PutObjectArgs.builder() + .bucket("test") + .object("upload/"+name) + .stream(stream, file.getSize(), -1) + .build(); + client.putObject(args); + return name; + } + + @GetMapping("file/{name}") + public void file(@PathVariable("name") String name, + HttpServletResponse response) throws Exception{ + GetObjectResponse object = client.getObject(GetObjectArgs.builder().bucket("test").object("upload/"+name).build()); + ServletOutputStream stream = response.getOutputStream(); + stream.write(object.readAllBytes()); + } +} ``` \ No newline at end of file diff --git a/环境/Docker-Compose/Docker-Compose 安装 Nginx Proxy Manager.md b/环境/安装教程/Nginx Proxy Manager.md similarity index 100% rename from 环境/Docker-Compose/Docker-Compose 安装 Nginx Proxy Manager.md rename to 环境/安装教程/Nginx Proxy Manager.md diff --git a/环境/安装教程/YuFei.83721.@.md b/环境/安装教程/YuFei.83721.@.md deleted file mode 100644 index dd79d09..0000000 --- a/环境/安装教程/YuFei.83721.@.md +++ /dev/null @@ -1 +0,0 @@ -yufei83721@gmail.com \ No newline at end of file diff --git a/环境/安装教程/graylog skywalking.md b/环境/安装教程/graylog skywalking.md new file mode 100644 index 0000000..e86a0e4 --- /dev/null +++ b/环境/安装教程/graylog skywalking.md @@ -0,0 +1,231 @@ +整合 elasticsearch mongodb graylog skywalking-oap skywalking -ui + +```yaml +version: "3" +services: + elasticsearch: + image: elasticsearch:7.17.5 + container_name: elasticsearch + ports: + - "9200:9200" + - "9300:9300" + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出 + interval: 60s #⼼跳检测间隔周期 + timeout: 10s + retries: 3 + start_period: 60s #⾸次检测延迟时间 + environment: + discovery.type: single-node #单节点模式 + ingest.geoip.downloader.enabled: "false" + bootstrap.memory_lock: "true" + ES_JAVA_OPTS: "-Xms512m -Xmx512m" + TZ: "Asia/Shanghai" + xpack.security.enabled: "false" #单机模式 + ulimits: + memlock: + soft: -1 + hard: -1 + mongodb: + image: mongo:4.4 + container_name: mongodb + restart: always + ports: + - "27017:27017" + environment: + - MONGO_INITDB_ROOT_USERNAME=xlcs + - MONGO_INITDB_ROOT_PASSWORD=123321 + graylog: + image: graylog/graylog:4.3 + container_name: graylog + ports: + - "9000:9000" + - "12201:12201/udp" + environment: + - GRAYLOG_HTTP_EXTERNAL_URI=http://10.211.55.50:9000/ + - GRAYLOG_ELASTICSEARCH_HOSTS=http://10.211.55.50:9200/ + - GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai + - GRAYLOG_WEB_ENDPOINT_URI=http://10.211.55.50:9000/api + - GRAYLOG_PASSWORD_SECRET=somepasswordpepper + - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 + - GRAYLOG_MONGODB_URI=mongodb://xlcs:123321@10.211.55.50:27017/admin + depends_on: + - elasticsearch + - mongodb + links: + - elasticsearch + - mongodb + + skywalking-oap: + image: apache/skywalking-oap-server:9.3.0 + container_name: skywalking-oap + depends_on: + elasticsearch: + condition: service_healthy + links: + - elasticsearch + environment: + SW_HEALTH_CHECKER: default + SW_STORAGE: elasticsearch + SW_STORAGE_ES_CLUSTER_NODES: 10.211.55.50:9200 + JAVA_OPTS: "-Xms2048m -Xmx2048m" + TZ: Asia/Shanghai + SW_TELEMETRY: prometheus + healthcheck: + test: ["CMD-SHELL", "/skywalking/bin/swctl ch"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + restart: on-failure + ports: + - "11800:11800" + - "12800:12800" + + skywalking-ui: + image: apache/skywalking-ui:9.3.0 + container_name: skywalking-ui + depends_on: + skywalking-oap: + condition: service_healthy + links: + - skywalking-oap + ports: + - "8080:8080" + environment: + SW_OAP_ADDRESS: http://10.211.55.50:12800 + SW_HEALTH_CHECKER: default + TZ: Asia/Shanghai + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出 + interval: 60s #⼼跳检测间隔周期 + timeout: 10s + retries: 3 + start_period: 60s #⾸次检测延迟时间 +``` + + + +```yaml +version: "3" +services: + elasticsearch: + image: elasticsearch:7.17.5 + container_name: elasticsearch + ports: + - "9200:9200" + - "9300:9300" + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出 + interval: 60s #⼼跳检测间隔周期 + timeout: 10s + retries: 3 + start_period: 60s #⾸次检测延迟时间 + volumes: + - es-data:/usr/share/elasticsearch/data + - es-plugins:/usr/share/elasticsearch/plugins + environment: + discovery.type: single-node #单节点模式 + ingest.geoip.downloader.enabled: "false" + bootstrap.memory_lock: "true" + ES_JAVA_OPTS: "-Xms512m -Xmx512m" + TZ: "Asia/Shanghai" + xpack.security.enabled: "false" #单机模式 + privileged: true + ulimits: + memlock: + soft: -1 + hard: -1 + mongodb: + image: mongo:4.4 + container_name: mongodb + restart: always + ports: + - "27017:27017" + volumes: + - mongodb:/data/db + environment: + - MONGO_INITDB_ROOT_USERNAME=xlcs + - MONGO_INITDB_ROOT_PASSWORD=123321 + + graylog: + image: graylog/graylog:4.3 + container_name: graylog + ports: + - "9000:9000" + - "12201:12201/udp" + environment: + - GRAYLOG_HTTP_EXTERNAL_URI=http://10.211.55.50:9000/ + - GRAYLOG_ELASTICSEARCH_HOSTS=http://10.211.55.50:9200/ + - GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai + - GRAYLOG_WEB_ENDPOINT_URI=http://10.211.55.50:9000/api + - GRAYLOG_PASSWORD_SECRET=somepasswordpepper + - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 + - GRAYLOG_MONGODB_URI=mongodb://xlcs:123321@10.211.55.50:27017/admin + depends_on: + - elasticsearch + - mongodb + links: + - elasticsearch + - mongodb + + skywalking-oap: + image: apache/skywalking-oap-server:9.3.0 + container_name: skywalking-oap + depends_on: + elasticsearch: + condition: service_healthy + links: + - elasticsearch + environment: + SW_HEALTH_CHECKER: default + SW_STORAGE: elasticsearch + SW_STORAGE_ES_CLUSTER_NODES: 10.211.55.50:9200 + JAVA_OPTS: "-Xms2048m -Xmx2048m" + TZ: Asia/Shanghai + SW_TELEMETRY: prometheus + healthcheck: + test: ["CMD-SHELL", "/skywalking/bin/swctl ch"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + restart: on-failure + ports: + - "11800:11800" + - "12800:12800" + + skywalking-ui: + image: apache/skywalking-ui:9.3.0 + container_name: skywalking-ui + depends_on: + skywalking-oap: + condition: service_healthy + links: + - skywalking-oap + ports: + - "8080:8080" + environment: + SW_OAP_ADDRESS: http://10.211.55.50:12800 + SW_HEALTH_CHECKER: default + TZ: Asia/Shanghai + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出 + interval: 60s #⼼跳检测间隔周期 + timeout: 10s + retries: 3 + start_period: 60s #⾸次检测延迟时间 + + kibana: + image: kibana:7.17.5 + container_name: kibana + ports: + - "5601:5601" + links: + - elasticsearch:elasticsearch +volumes: + es-data: + es-plugins: + mongodb: +``` + diff --git a/环境/安装教程/安装Minio服务.md b/环境/安装教程/安装Minio服务.md deleted file mode 100644 index 6174216..0000000 --- a/环境/安装教程/安装Minio服务.md +++ /dev/null @@ -1,209 +0,0 @@ -## MinIO是什么? - -![](https://lsky.hhdxw.top/imghub/2024/01/image-202401101704861743.png) - -官方解释:MinIO 是一个基于Apache License v2.0开源协议的[对象存储](https://cloud.tencent.com/product/cos?from_column=20065&from=20065)服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 - -MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。 - -## MinIO有哪些优势 - -### 1. 开发文档全面 - -MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。。 - -官网文档地址:https://docs.min.io/cn/ - -### 2.高性能 - -MinIO号称是目前速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s。对象存储可以作为主存储层,用来处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。 - -MinIO用作云原生应用程序的主要存储,和传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。 - -### 3.容器化集成方便 - -MinIO提供了与k8s、etcd、docker等主流容器化技术深度集成方案。 - -## 安装MinIo服务 - -想要安装Minio有两种方案,第一种是直接在服务器上安装,还有一种是使用Docker快速部署。 - -官方文档:https://www.minio.org.cn/docs/cn/minio - -### 直接安装 - -安装包下载页面:https://dl.min.io/server/minio/release/,我们需要选择好对应架构和系统的安装包,比如Ubuntu/Debian系统下,我们可以像这样安装: - -```sh -wget https://dl.min.io/server/minio/release/linux-amd64/minio_20230831153116.0.0_amd64.deb -O minio.deb -sudo dpkg -i minio.deb -``` - -在CentOS/Redhat(RHEL)系统下,可以像这样安装: - -```sh -wget https://dl.min.io/server/minio/release/linux-amd64/minio-20230831153116.0.0.x86_64.rpm -O minio.rpm -sudo dnf install minio.rpm -``` - -安装完成后,我们需要创建一个用于存放minio文件数据的目录: - -```sh -sudo mkdir /mnt/minio -``` - -然后创建一个minio使用的用户,并为此用户分配对应目录的访问权限: - -```sh -groupadd -r minio-user -useradd -M -r -g minio-user minio-user -chown minio-user:minio-user /mnt/minio -``` - -接着我们需要创建Minio的配置文件: - -```sh -sudo vim /etc/default/minio -``` - -编写以下内容到配置文件中: - -```properties -#系统管理员账号和密码 -MINIO_ROOT_USER=minio -MINIO_ROOT_PASSWORD=password -#设置用于存储数据的目录 -MINIO_VOLUMES="/mnt/minio" -#项目接口访问地址 -MINIO_SERVER_URL="http://0.0.0.0:9000" -#配置其他选项,比如后台管理系统的地址 -MINIO_OPTS="--console-address 0.0.0.0:9090" -``` - -配置完成之后就可以启动Minio服务了: - -```sh -sudo systemctl enable minio.service -sudo systemctl start minio.service -``` - -### 使用Docker安装 - -对于各位小伙伴本地开发测试,这里更推荐使用Docker镜像安装,非常简单快捷,本地安装好Docker客户端之后,只需要执行以下命令就能快速部署: - -```sh -docker run -p 9000:9000 -p 9090:9090 --name minio \ - -d --restart=always \ - -e "MINIO_ACCESS_KEY=minio" \ - -e "MINIO_SECRET_KEY=password" \ - -v database:/data \ - minio/minio server \ - /data --console-address ":9090" -address ":9000" -``` - -非常方便快捷。 - ------- - -## 使用Java操作对象存储 - -前面我们搭建好了对象存储服务,接着就可以开始愉快地使用了。 - -### 基本使用 - -Minio已经为我们提供了封装好的依赖,我们只需要直接使用即可: - -```xml - - io.minio - minio - 8.3.9 - -``` - -接着我们需要创建一个Minio客户端用于访问对象存储服务器: - -```java -MinioClient client = MinioClient.builder() - .endpoint("http://localhost:9000") //对象存储服务地址,注意是9000那个端口 - .credentials("minio", "password") //账户直接使用管理员 - .build(); -``` - -对于Java的相关操作,可以说非常全面,包含对桶的操作、对象操作等等,文档地址:https://www.minio.org.cn/docs/cn/minio/linux/developers/java/API.html,这里我们先演示一下文件上传: - -```java -//首先找到我们需要上传的文件 -File file = new File("/Users/nagocoler/Downloads/test.jpg"); -//构造一个输入流用于文件传输 -FileInputStream stream = new FileInputStream(file); -//填写上传的相关参数,使用PutObjectArgs的Builder来完成 -PutObjectArgs put = PutObjectArgs.builder() - .bucket("test") //设置需要上传的桶名称 - .object("666.jpg") //设置上传后保存的文件名称 - .stream(stream, file.length(), -1) //配置流以及大小还有分片大小 - .build(); -client.putObject(put); //使用putObject方法完成上传操作 -``` - -这样就可以将文件上传到对象存储服务器中了。 - -接着是下载文件: - -```java -//填写下载相关的参数,使用GetObjectArgs来完成 -GetObjectArgs get = GetObjectArgs.builder() - .bucket("test") //设置需要下载的桶名称 - .object("666.jpg") //设置下载后保存的文件名称 - .build(); -GetObjectResponse response = client.getObject(get); -//使用输出流保存下载的文件到本地 -FileOutputStream stream = new FileOutputStream("/Users/nagocoler/Downloads/download.png"); -stream.write(response.readAllBytes()); -stream.close(); -``` - -最后是删除桶里的文件: - -```java -RemoveObjectArgs remove = RemoveObjectArgs.builder() - .bucket("test") //设置需要删除文件的桶名称 - .object("666.jpg") //设置删除的文件名称 - .build(); -client.removeObject(remove); //删就完事 -``` - -### 服务器文件上传和下载 - -实例代码: - -```java -@RestController -@RequestMapping("/") -public class FileController { - - @Resource - MinioClient client; - - @PostMapping("upload") - public String upload(@RequestParam("file") MultipartFile file) throws Exception { - InputStream stream = file.getInputStream(); - String name = UUID.randomUUID().toString(); - PutObjectArgs args = PutObjectArgs.builder() - .bucket("test") - .object("upload/"+name) - .stream(stream, file.getSize(), -1) - .build(); - client.putObject(args); - return name; - } - - @GetMapping("file/{name}") - public void file(@PathVariable("name") String name, - HttpServletResponse response) throws Exception{ - GetObjectResponse object = client.getObject(GetObjectArgs.builder().bucket("test").object("upload/"+name).build()); - ServletOutputStream stream = response.getOutputStream(); - stream.write(object.readAllBytes()); - } -} -``` \ No newline at end of file