Heim >Java >javaLernprogramm >SpringBoot+MinIO implementiert Objektspeicher

SpringBoot+MinIO implementiert Objektspeicher

Java学习指南
Java学习指南nach vorne
2023-07-20 11:09:27859Durchsuche

1. MinIO

MinIO ist ein Objektspeicherdienst, der auf dem Open-Source-Protokoll Apache License v2.0 basiert. Es ist mit der Amazon S3-Cloud-Speicherdienstschnittstelle kompatibel und eignet sich sehr gut zum Speichern großer unstrukturierter Daten wie Bilder, Videos, Protokolldateien, Sicherungsdaten und Container-/Virtual-Machine-Images usw. sowie einer Objektdatei in beliebiger Größe, im Bereich von mehreren kb bis maximal 5T.

MinIO ist ein sehr leichter Dienst, der problemlos mit anderen Anwendungen wie NodeJS, Redis oder MySQL kombiniert werden kann.

2. MinIO-Installation und -Start

Da MinIO ein separater Server ist und separat bereitgestellt werden muss, lesen Sie bitte den folgenden Blog für die Verwendung von MinIO auf Windows-Systemen.

  • https://blog.csdn.net/Angel_asp/article/details/128544612

Drei, pom.xml

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.16</version>
</dependency>
<!-- SpringBoot Web容器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.3.4</version>
</dependency>

Vier, applicatin.properties (Konfigurationsdatei)

# 设置单个文件大小
spring.servlet.multipart.max-file-size= 50MB
#minio文件服务器配置
s3.url=http://localhost:9000
s3.accessKey=admin
s3.secretKey=admin123
s3.bucketName=test

5. Schreiben von Java-Geschäftsklassen

Die in Minio enthaltenen Methoden sind: Bestimmen, ob der Bucket vorhanden ist, Erstellen eines Buckets, Hochladen von Dateien, Lesen von Dateien, Herunterladen von Dateien, Löschen von Dateien und andere Vorgänge

1 :

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
 
/**
 * @Author yang
 * @Date 2023/1/3 14:00
 * @Version 1.0
 */
@Data
@Component
@ConfigurationProperties(prefix = "s3")
public class StorageProperty {
    private String url;
    private String accessKey;
    private String secretKey;
//    private long callTimeOut = 60000;
//    private long readTimeOut = 300000;
}

2. Minio-Konfigurationsklasse:

import io.minio.BucketExistsArgs;
import io.minio.MinioClient;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
 
import javax.annotation.PostConstruct;
import java.util.List;
 
/**
 * @Author yang
 * @Date 2023/1/3 14:03
 * @Version 1.0
 */
@Slf4j
@Component
@Configuration
public class MinioClientConfig {
 
    @Autowired
    private StorageProperty storageProperty;
 
    private static MinioClient minioClient;
 
 
    /**
     * @description: 获取minioClient
     * @date 2021/6/22 16:55
     * @return io.minio.MinioClient
     */
    public static MinioClient getMinioClient(){
        return minioClient;
    }
 
    /**
     * 判断 bucket是否存在
     *
     * @param bucketName:
     *            桶名
     * @return: boolean
     * @date : 2020/8/16 20:53
     */
    @SneakyThrows(Exception.class)
    public static boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
    }
 
 
    /**
     * 获取全部bucket
     *
     * @param :
     * @return: java.util.List<io.minio.messages.Bucket>
     * @date : 2020/8/16 23:28
     */
    @SneakyThrows(Exception.class)
    public static List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
    }
 
    /**
     * 初始化minio配置
     *
     * @param :
     * @return: void
     * @date : 2020/8/16 20:56
     */
    @PostConstruct
    public void init() {
        try {
            minioClient = MinioClient.builder()
                    .endpoint(storageProperty.getUrl())
                    .credentials(storageProperty.getAccessKey(), storageProperty.getSecretKey())
                    .build();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
        }
    }
 
}

6. MinIoController

Die Schnittstellen für das Hochladen von Dateien, das Lesen von Dateien, das Herunterladen von Dateien und das Löschen von Dateien sind wie folgt:

/**
 * @Author yangb
 * @Date 2022/11/27 15:55
 * @Version 1.0
 */
@RestController
@RequestMapping("/minio")
public class MinIoController extends BaseController {
 
    MinioUtil minioUtil = new MinioUtil();
 
    /**
     * 上传文件
     * @param file
     * @return
     */
    @PostMapping("/uploadFile")
    public AjaxResult uploadFile(@RequestBody MultipartFile file) {
        MinioClient minioClient = MinioClientConfig.getMinioClient();
        if (minioClient == null) {
            return AjaxResult.error("连接MinIO服务器失败", null);
        }
        ResultEntity<Map<String, Object>> result = minioUtil.minioUpload(file, "", "data-enpower");
        if (result.getCode() == 0) {
            return AjaxResult.success("上传成功");
        } else {
            return AjaxResult.error("上传错误!!!");
        }
    }
 
    /**
     * 获取文件预览地址
     * @param fileName
     * @return
     */
    @RequestMapping("/getRedFile")
    public AjaxResult getRedFile(@RequestBody String fileName) {
        MinioClient minioClient = MinioClientConfig.getMinioClient();
        if (minioClient == null) {
            return AjaxResult.error("连接MinIO服务器失败", null);
        }
        String url = minioUtil.getPreviewFileUrl("data-enpower",fileName);
        return AjaxResult.success(url);
    }
 
    /**
     * 下载文件
     * @param fileName
     * @param response
     * @return
     */
    @RequestMapping("/downloadFile")
    public String downloadFile(@RequestParam String fileName, HttpServletResponse response) {
        MinioClient minioClient = MinioClientConfig.getMinioClient();
        if (minioClient == null) {
            return "连接MinIO服务器失败";
        }
        return minioUtil.downloadFile("data-enpower",fileName,response) != null ? "下载成功" : "下载失败";
    }
 
    /**
     * 删除文件
     *
     * @param fileName 文件路径
     * @return
     */
    @PostMapping("/deleteFile")
    public String deleteFile(String fileName) {
        MinioClient minioClient = MinioClientConfig.getMinioClient();
        if (minioClient == null) {
            return "连接MinIO服务器失败";
        }
        boolean flag = minioUtil.deleteFile("data-enpower",fileName);
        return flag == true ? "删除成功" : "删除失败";
    }
 
 
}

七、调试结果

1、 文件上传

SpringBoot+MinIO implementiert Objektspeicher

minio上的文件

SpringBoot+MinIO implementiert Objektspeicher

2、 文件下载

SpringBoot+MinIO implementiert Objektspeicher

3、 文件删除

SpringBoot+MinIO implementiert Objektspeicher

我们在minio上看看文件是否已删除

SpringBoot+MinIO implementiert Objektspeicher



Das obige ist der detaillierte Inhalt vonSpringBoot+MinIO implementiert Objektspeicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:Java学习指南. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen