springboot 集成minio 图片上传显示

springboot 集成minio 图片上传、显示

pom新增Maven依赖

    <!--minio依赖-->
    <dependency>
      <groupId>io.minio</groupId>
      <artifactId>minio</artifactId>
      <version>7.0.2</version>
    </dependency>

application.yml新增配置

`server:
  #端口
  port: 8081

#配置minio
minio:
  host: http://192.168.1.199:9000
  url: ${minio.host}/${minio.bucket}/
  access-key: minioadmin
  secret-key: minioadmin
  bucket: sweet-oa-file

spring:
  # 配置文件上传大小限制
  servlet:
    multipart:
      max-file-size: 200MB
      max-request-size: 200MB`

编写Minio工具类MinioConfig

import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.Result;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.util.UriUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;


@Component
public class MinioConfig implements InitializingBean {

    @Value(value = "${minio.bucket}")
    private String bucket;

    @Value(value = "${minio.host}")
    private String host;

    @Value(value = "${minio.url}")
    private String url;

    @Value(value = "${minio.access-key}")
    private String accessKey;

    @Value(value = "${minio.secret-key}")
    private String secretKey;

    private MinioClient minioClient;

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.hasText(url, "Minio url 为空");
        Assert.hasText(accessKey, "Minio accessKey为空");
        Assert.hasText(secretKey, "Minio secretKey为空");
        this.minioClient = new MinioClient(this.host, this.accessKey, this.secretKey);
    }

    /**
     * 上传
     */
    public String putObject(MultipartFile multipartFile) throws Exception {
        // bucket 不存在,创建
        if (!minioClient.bucketExists(this.bucket)) {
            minioClient.makeBucket(this.bucket);
        }
        try (InputStream inputStream = multipartFile.getInputStream()) {
            // 上传文件的名称
            String fileName = multipartFile.getOriginalFilename();
            // PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
            PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
            // 文件的ContentType
            putObjectOptions.setContentType(multipartFile.getContentType());
            minioClient.putObject(this.bucket, fileName, inputStream, putObjectOptions);
            // 返回访问路径
            return this.url + UriUtils.encode(fileName, StandardCharsets.UTF_8);
        }
    }

    /**
     * 文件下载
     */
    public void download(String fileName, HttpServletResponse response){
        // 从链接中得到文件名
        InputStream inputStream;
        try {
            MinioClient minioClient = new MinioClient(host, accessKey, secretKey);
            ObjectStat stat = minioClient.statObject(bucket, fileName);
            inputStream = minioClient.getObject(bucket, fileName);
            response.setContentType(stat.contentType());
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            IOUtils.copy(inputStream, response.getOutputStream());
            inputStream.close();
        } catch (Exception e){
            e.printStackTrace();
            System.out.println("有异常:" + e);
        }
    }
    /**
     * 检查存储桶是否存在
     * @param bucketName
     * @return
     * @throws Exception
     */
    public boolean bucketExists(String bucketName) throws Exception {
        boolean flag = minioClient.bucketExists(bucketName);
        if (flag) {
            return true;
        }
        return false;
    }
    
    /**
     * 文件访问路径
     * @param bucketName 存储桶名称
     * @param objectName 存储桶里的对象名称
     * @return
     * @throws Exception
     */
    public String getObjectUrl(String bucketName, String objectName) throws Exception {
        boolean flag = bucketExists(bucketName);
        String url = "";
        if (flag) {
            url = minioClient.getObjectUrl(bucketName, objectName);
        }
        return url;
    }

}

更新头像图片资源

    @ApiOperation(value = "更新用户头像")
    @ApiImplicitParams({@ApiImplicitParam(name = "file", value = "头像", dataType = "MultipartFile")})
    @PostMapping("/admin/userface")
    public RespBean updateHrUserFace(MultipartFile file, Integer id, Authentication authentication) throws Exception {
        //1.将头像资源交给minio,返回访问路径
        String uploadUrl = minioConfig.putObject(file);
        // 2. 头像地址和用户id,交给service进行保存到数据库中。
        return adminService.updateAdminUserFace(uploadUrl, id, authentication);
    }

修改minio客户端配置

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于SpringBoot集成MinIO实现上传下载,我可以为你提供如下的解答: MinIO是一个开源的对象存储服务,支持S3协议,适用于云原生应用场景,具有高可用、高性能、易扩展等特点。SpringBoot是一个快速开发框架,可快速创建基于Spring的应用程序。二者集成后,可以快速实现文件上传下载功能。 首先,通过SpringBoot的依赖管理工具(如Maven或Gradle)引入MinIO的依赖包。然后,配置MinIO的连接信息,包括连接地址、端口、访问密钥等。接下来,通过MinIOJava客户端SDK,实现文件上传下载的逻辑。具体步骤如下: 1. 引入依赖 在pom.xml中添加以下依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.7</version> </dependency> ``` 2. 配置连接信息 可以通过配置文件或者代码方式配置连接信息。以下为代码配置方式: ``` @Configuration public class MinioConfig { @Bean public MinioClient minioClient() throws Exception { String endpoint = "localhost:9000"; String accessKey = "your-access-key"; String secretKey = "your-secret-key"; return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ``` 3. 实现上传下载逻辑 以下为文件上传的示例代码: ``` @Autowired private MinioClient minioClient; public void uploadFile(String bucketName, String objectName, String fileName) throws Exception { // 检查Bucket是否存在,不存在则创建 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } // 上传文件 minioClient.uploadObject(UploadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(fileName) .build()); } ``` 以下为文件下载的示例代码: ``` @Autowired private MinioClient minioClient; public void downloadFile(String bucketName, String objectName, String fileName) throws Exception { // 下载文件 minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(fileName) .build()); } ``` 以上就是SpringBoot集成MinIO实现上传下载的基本步骤,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值