配置类编写
java
package com.nie.lease.common.minio;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration
public class MinioConfiguration {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
@Bean
public MinioClient minioClient(){
return MinioClient.builder().endpoint( endpoint).credentials(accessKey, secretKey).build();
}
}
属性
java
server:
port: 8080
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://192.168.10.101:3306/lease?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
username: root
password: Niehaihai.123
hikari:
connection-test-query: SELECT 1 # 自动检测连接
connection-timeout: 60000 # 数据库连接超时时间,默认30秒
idle-timeout: 500000 # 空闲连接存活最大时间,默认600000(10分钟)
max-lifetime: 540000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
maximum-pool-size: 12 # 连接池最大连接数,默认是10
minimum-idle: 10 # 最小空闲连接数量
pool-name: SPHHikariPool # 连接池名称
# 用于打印对象生成的sql语句,便于调试
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
minio:
endpoint: http://192.168.10.101:9000
access-key: minioadmin
secret-key: minioadmin
bucket-name: lease
controller类
java
package com.nie.lease.web.admin.controller.apartment;
import com.nie.lease.common.result.Result;
import com.nie.lease.web.admin.service.FileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@Tag(name = "文件管理")
@RequestMapping("/admin/file")
@RestController
public class FileUploadController {
@Autowired
private FileService fileService;
@Operation(summary = "上传文件")
@PostMapping("upload")
public Result<String> upload(@RequestParam MultipartFile file) {
String url=fileService.upload(file);
return Result.ok(url);
}
}
service接口类
java
package com.nie.lease.web.admin.service;
import org.springframework.web.multipart.MultipartFile;
public interface FileService {
String upload(MultipartFile file);
}
service实现类
java
package com.nie.lease.web.admin.service.impl;
import com.nie.lease.web.admin.service.FileService;
import io.minio.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Service
public class FileServiceImpl implements FileService {
@Autowired
private MinioClient minioClient;
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.bucket-name}")
private String bucketName;
public String upload(MultipartFile file) {
try {
boolean bucketExists = minioClient.bucketExists(
BucketExistsArgs.builder().
bucket(bucketName).build());
if (!bucketExists){
minioClient.makeBucket(
MakeBucketArgs.builder()
.bucket(bucketName)
.build());
minioClient.setBucketPolicy(
SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(createBucketPolicyConfig(bucketName))
.build());
}
String filename = new SimpleDateFormat("yyyyMMdd").format(new Date()) +
"/" + UUID.randomUUID() + "-" + file.getOriginalFilename();
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.stream(file.getInputStream(),file.getSize(),-1)
.object(filename)
.contentType(file.getContentType())
.build());
return String.join("/",endpoint,bucketName,filename);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String createBucketPolicyConfig(String bucketName) {
return """
{
"Statement" : [ {
"Action" : "s3:GetObject",
"Effect" : "Allow",
"Principal" : "*",
"Resource" : "arn:aws:s3:::%s/*"
} ],
"Version" : "2012-10-17"
}
""".formatted(bucketName);
}
}
测试结果: 当我们随便上传一张图片后
他会给我们返回一个URL

我们用浏览器访问他一下 发现他成功被访问 这说明我们配置正确