SpringBoot集成minio文件存储

一、Windows安装minio服务

1.官网下载minio服务端

下载地址

在这里插入图片描述

2.切换到Minio.exe的所在路径

1.创建data、logs两个目录

2.打开cmd运行

#设置设置用户名
setx MINIO_ROOT_USER myname
#设置登录密码
setx MINIO_ROOT_PASSWORD mypassword

2.启动服务

minio.exe server \data --console-address ":9090" --address ":9000" > \logs\minio.log

1.data为创建的data目录
2.logs为创建的logs目录
(改为自己的实际目录即可)
3.9090是控制台端口,9000才是服务的端口。

3.浏览器打开

http://127.0.0.1:9090
填入刚刚设置的账号密码。
如果忘了可以在logs\minio.log文件中查看
在这里插入图片描述
进入主页面:
在这里插入图片描述

二.Linux中minio安装

1.下载包

下载地址

https://dl.min.io/server/minio/release/linux-amd64/minio

2.新建安装目录

mkdir -p /opt/minio/{data,logs}

3.将下载的文件移动到minio目录下,执行

mv minio minio /opt/minio //移动到指定目录
chmod +x minio    //给予权限
export MINIO_ACCESS_KEY=myname//创建账号
export MINIO_SECRET_KEY=mypassword//创建密码
./minio server /opt/minio/data        //启动
 

在这里插入图片描述

4.启动&后台启动

//前台启动
./minio server /opt/minio/data 
//后台启动
nohup ./minio server /opt/minio/data > /opt/minio/logs/minio.log & 

在这里插入图片描述

注意:需要在Linux中关闭防火墙或者开放所需要的端口,否则会无法访问的

5.自定义端口启动(默认端口:9000)

自定义端口方式:自定义启动端口号以及控制台端口号,不设置则控制台会自动配置其他端口号,非常不方便。
–address和–console-address是MinIO服务器启动命令中的两个参数,它们具有以下区别:

–address参数:用于指定MinIO服务器监听的S3 API访问地址。S3 API是用于与MinIO进行对象存储操作的接口,例如上传、下载、删除对象等。通过–address参数,您可以指定MinIO服务器监听的IP地址和端口。例如,–address '0.0.0.0:9000’表示MinIO服务器将监听所有网络接口上的9000端口。

–console-address参数:用于指定MinIO服务器控制台的访问地址。控制台是MinIO的管理界面,提供了用户友好的界面来管理存储桶、对象和访问权限等。通过–console-address参数,您可以指定MinIO服务器控制台的IP地址和端口。例如,–console-address '0.0.0.0:9999’表示MinIO服务器的控制台将监听所有网络接口上的9999端口。

总结起来,–address参数用于S3 API访问,而–console-address参数用于MinIO服务器控制台访问。它们允许您分别指定不同的IP地址和端口来处理这两种类型的访问请求。

nohup ./minio server  --address :9000 --console-address :9001 /opt/minio/data > /opt/minio/logs/minio.log &

6.查看状态

ps -ef|grep minio

在这里插入图片描述

7.浏览器访问

http://127.0.0.1:9000
在这里插入图片描述

三.SprongBoot中配置

1.pom.xml文件中添加依赖(如果有版本冲突更换相关版本即可)

   <!-- minio 相关依赖 -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>3.0.10</version>
        </dependency>

        <!-- alibaba的fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.79</version>
        </dependency>
          <!-- lombok -->
         <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
		   <!-- SpringBoot配置依赖-->
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>3.1.2</version>
        </dependency>

2. application.yml配置


minio:
  endpoint: http://127.0.0.1:9000 #服务运行端口
  accesskey: myname #刚刚设置的账号
  secretKey: mypassword #刚刚设置的密码

3.代码编写

1.实体类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
 
    private String endpoint;

    private String accesskey;

    private String secretKey;
}

2.配置类

import com.example.minio.pojo.MinioProp;
import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfig {

    @Autowired
    private MinioProp minioProp;
    @Bean
    public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
        return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
    }
}

3.工具类

import com.alibaba.fastjson.JSONObject;
import com.example.minio.pojo.MinioProp;;
import io.minio.MinioClient;
import io.minio.errors.*;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

@Slf4j
@Component
public class MinioUtils {

    @Autowired
    private MinioClient client;
    @Autowired
    private MinioProp minioProp;

    /**
     * 创建bucket
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
        if (!client.bucketExists(bucketName)) {
            client.makeBucket(bucketName);
        }
    }

    /**
     * 上传文件
     *
     * @param file       文件
     * @param bucketName 存储桶
     * @return
     */
    public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception {
        JSONObject res = new JSONObject();
        res.put("code", 0);
        // 判断上传文件是否为空
        if (null == file || 0 == file.getSize()) {
            res.put("msg", "上传文件不能为空");
            return res;
        }
        try {
            // 判断存储桶是否存在
            createBucket(bucketName);
            // 文件名
            String originalFilename = file.getOriginalFilename();
            // 新的文件名 = 存储桶名称_时间戳.后缀名
            String fileName = bucketName + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));
            // 开始上传
            client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType());
            res.put("code", 1);
            res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);
            return res;
        }  catch (Exception e) {
            log.error("上传文件失败:{}", e.getMessage());
        }
        res.put("msg", "上传失败");
        return res;
    }



}

4.控制类


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.minio.utils.MinioUtils;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@CrossOrigin("*")
public class MinioController {

    @Autowired
    private MinioUtils minioUtils;

    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) {
        JSONObject res = null;
        try {
            res = minioUtils.uploadFile(file, "product");
        } catch (Exception e) {
            e.printStackTrace();
            res.put("code", 0);
            res.put("msg", "上传失败");
        }
        return res.toJSONString();
    }
}


5.ApiPost测试

在这里插入图片描述

6.浏览器访问

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中集成Minio实现文件批量下载的方法如下: 1. 首先,确保已经在Spring Boot项目中引入了Minio的依赖。可以在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.6</version> </dependency> ``` 2. 在Spring Boot的配置文件中配置Minio的连接信息。可以在`application.properties`或`application.yml`文件中添加以下配置: ```yaml minio: url: http://localhost:9000 access-key: your-access-key secret-key: your-secret-key bucket-name: your-bucket-name ``` 请将`your-access-key`、`your-secret-key`和`your-bucket-name`替换为实际的Minio连接信息。 3. 创建一个文件下载的Controller,用于处理文件下载的请求。可以创建一个`FileController`类,并添加以下代码: ```java import io.minio.MinioClient; import io.minio.GetObjectArgs; import io.minio.errors.MinioException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; @Controller public class FileController { @Autowired private MinioClient minioClient; @GetMapping("/download/{filename}") public ResponseEntity<InputStreamResource> downloadFile(@PathVariable("filename") String filename, HttpServletResponse response) throws IOException { try { InputStream inputStream = minioClient.getObject( GetObjectArgs.builder() .bucket("your-bucket-name") .object(filename) .build() ); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", URLEncoder.encode(filename, "UTF-8")); return ResponseEntity.ok() .headers(headers) .body(new InputStreamResource(inputStream)); } catch (MinioException e) { // 处理Minio异常 e.printStackTrace(); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return null; } } } ``` 请将`your-bucket-name`替换为实际的Minio存储桶名称。 4. 启动Spring Boot应用程序,并访问`/download/{filename}`接口来下载文件。将`{filename}`替换为实际要下载的文件名。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值