springboot整合minio实现文件上传下载

服务器准备

  • 两台linux服务器,每台挂载2块硬盘
  • 共2个minio节点,4块磁盘
  1. 2台虚拟机各添加2块1G的硬盘;
  2. 分区、格式化、挂载到指定文件夹(命令见语雀linux命令);

部署Minio服务

节点 ip 磁盘
minio node1 192.168.2.32 /newdisk1, /newdisk2
minio node2 192.168.2.33 /newdisk1, /newdisk2
nginx 192.168.2.32 /usr/local/nginx
  • MINIO_ROOT_USER:用户名,长度最小是 5 个字符;

  • MINIO_ROOT_PASSWORD:密码,密码不能设置过于简单,不然 minio 会启动失败,长度最小是 8 个字符;

  • –config-dir:指定集群配置文件目录;

  • –address:api 的端口,默认是9000

  • --console-address :web 后台端口,默认随机;

# 创建minio所用目录
mkdir -p /home/minio/{run,conf} && mkdir -p /etc/minio

# 下载minio上传到此文件夹
cd /home/minio/run
chmod +x minio

# 编写启动脚本(/home/minio/run/minio-run.sh)
#!/bin/bash
export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
/home/minio/run/minio server --config-dir /home/minio/conf \
--address "192.168.2.32:9000" --console-address ":50000" \
http://192.168.2.32/newdisk1 http://192.168.2.32/newdisk2 \
http://192.168.2.33/newdisk1 http://192.168.2.33/newdisk2 \

# 执行启动脚本
sh minio-run.sh
  • 在2台服务器上都执行此操作,注意在2.33上执行时,把脚本里的address的ip改成本机;
  • 2台都启动后minio集群部署成功;
  • 启动后访问2台服务器的50000端口,查看控制台是否正常访问;

使用nginx负载均衡

# 编辑nginx配置文件
upstream minio_server {
    server 192.168.2.32:9000;
    server 192.168.2.33:9000;
}
upstream minio_console {
    server 192.168.2.32:50000;
    server 192.168.2.33:50000;
}
server{
    listen       9001;
    server_name  192.168.2.32;
    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;
    location / {
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_ignore_client_abort on;
        proxy_pass http://minio_server;
    }
}
server{
    listen       50001;
    server_name  192.168.2.32;
    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;
    location / {
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_ignore_client_abort on;
        proxy_pass http://minio_console;
    }
}



# reload配置文件
./nginx -s reload
  • 使用192.168.2.32:50001访问

整合到springboot

依赖

<dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>

配置文件

minio:
  endpoint: http://192.168.2.32:9001
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: weiz-test

  • MinioConfig
package com.start.config;

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
public class MinioConfig {

    @Value("${minio.endpoint}")
    private String endpoint;

    @Value("${minio.accessKey}")
    private String accessKey;

    @Value("${minio.secretKey}")
    private Str
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,需要引入minio的依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.2</version> </dependency> ``` 然后,在application.properties中配置minio的连接信息: ``` minio.url=http://localhost:9000 minio.accessKey=minioadmin minio.secretKey=minioadmin minio.bucketName=test ``` 接着,创建一个MinioService类,用于处理文件上传下载: ``` @Service public class MinioService { @Value("${minio.url}") private String minioUrl; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.bucketName}") private String bucketName; private final MinioClient minioClient = new MinioClient(minioUrl, accessKey, secretKey); public void upload(MultipartFile file) throws Exception { // 生成文件名 String originalFilename = file.getOriginalFilename(); String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf(".")); // 上传文件 minioClient.putObject(PutObjectArgs.builder() .bucket(bucketName) .object(fileName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build()); } public InputStream download(String fileName) throws Exception { // 下载文件 return minioClient.getObject(GetObjectArgs.builder() .bucket(bucketName) .object(fileName) .build()); } } ``` 最后,在Controller中使用MinioService处理上传和下载请求: ``` @RestController public class MinioController { @Autowired private MinioService minioService; @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile[] files) { try { for (MultipartFile file : files) { minioService.upload(file); } return "上传成功"; } catch (Exception e) { e.printStackTrace(); return "上传失败"; } } @GetMapping("/download") public ResponseEntity<InputStreamResource> download(@RequestParam("fileName") String fileName) { try { InputStream inputStream = minioService.download(fileName); InputStreamResource inputStreamResource = new InputStreamResource(inputStream); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "attachment; filename=" + fileName); return ResponseEntity.ok().headers(headers).contentLength(inputStream.available()) .contentType(MediaType.parseMediaType("application/octet-stream")).body(inputStreamResource); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } } ``` 这样,就可以使用Spring Boot和Minio实现文件批量上传了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值