尚庭公寓-------图片上传接口
配置类编写
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;@Beanpublic MinioClient minioClient(){return MinioClient.builder().endpoint( endpoint).credentials(accessKey, secretKey).build();}
}
属性
server:port: 8080spring:datasource:type: com.zaxxer.hikari.HikariDataSourceurl: jdbc:mysql://192.168.10.101:3306/lease?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8username: rootpassword: Niehaihai.123hikari:connection-test-query: SELECT 1 # 自动检测连接connection-timeout: 60000 # 数据库连接超时时间,默认30秒idle-timeout: 500000 # 空闲连接存活最大时间,默认600000(10分钟)max-lifetime: 540000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟maximum-pool-size: 12 # 连接池最大连接数,默认是10minimum-idle: 10 # 最小空闲连接数量pool-name: SPHHikariPool # 连接池名称# 用于打印对象生成的sql语句,便于调试
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplminio:endpoint: http://192.168.10.101:9000access-key: minioadminsecret-key: minioadminbucket-name: lease
controller类
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 {@Autowiredprivate FileService fileService;@Operation(summary = "上传文件")@PostMapping("upload")public Result<String> upload(@RequestParam MultipartFile file) {String url=fileService.upload(file);return Result.ok(url);}}
service接口类
package com.nie.lease.web.admin.service;import org.springframework.web.multipart.MultipartFile;public interface FileService {String upload(MultipartFile file);
}
service实现类
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 {@Autowiredprivate 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
我们用浏览器访问他一下 发现他成功被访问 这说明我们配置正确