图片存储方案(Minio使用)

官网地址:https://min.io/

MinIO 是一种高性能对象存储解决方案,它提供了与 Amazon Web Services S3 兼容的 API,并支持所有核心 S3 功能。MinIO 旨在部署在任何地

方——公共或私有云、裸机基础设施、编排环境和边缘基础设施。

Minio入门


使用步骤:

1、在minio服务端创建一个bucket,并设置访问权限为public

2、编写测试代码上传图片到minio中

在common模块中引入如下依赖:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>7.1.0</version>
</dependency>

测试用例:Java客户端使demo:https://min.io/docs/minio/linux/developers/minio-drivers.html?ref=docs#java-minio-java

@Service
public class FileUploadService {

    public String uploadFile(MultipartFile multipartFile) throws IOException {

        try {

            // 创建minio的客户端对象
            MinioClient minioClient = MinioClient.builder()
                    .endpoint("http://192.168.6.103:9000")
                    .credentials("admin" , "admin1234")
                    .build() ;

            // 判断bucket是否存在
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("gmall").build());
            if (!found) {

                // 创建一个bucket
                minioClient.makeBucket(MakeBucketArgs.builder().bucket("gmall").build());

            }

            // 创建上传对象的参数封装对象
            PutObjectArgs objectArgs = PutObjectArgs.builder()
                    .bucket("gmall")
                    .stream(multipartFile.getInputStream() , multipartFile.getSize() , -1)
                    .object(multipartFile.getOriginalFilename())
                    .build() ;

            // 进行上传操作
            minioClient.putObject(objectArgs) ;

        }catch (Exception e) {
            e.printStackTrace();
        }

        return "http://192.168.136.136:9000/gmall/" + multipartFile.getOriginalFilename() ;

    }

}

上传文件接口编写:

@RestController
@RequestMapping(value = "/admin/product")
public class FileUploadController {

    @Autowired
    private FileUploadService fileUploadService ;

    @PostMapping(value = "/fileUpload")
    public Result<String> fileUpload(@RequestParam(value = "file") MultipartFile multipartFile) throws IOException {
        String uploadFile = fileUploadService.uploadFile(multipartFile);
        return Result.ok(uploadFile) ;
    }

}

代码优化,可以把连接用户名密码等写到application.yml,然后抽取MinioClient配置类

application.yml

# 定义minio的连接信息
app:
  minio:
    endpoint: http://192.168.6.103:9000
    accessKey: admin
    secretKey: admin1234
    bucket: xxx

抽取MinioClient配置类


// 自定义封装连接用户名密码等
@Data
@ConfigurationProperties(prefix = "app.minio")
public class MinioProperties {

    private String endpoint ;
    private String bucketName ;

    private String secretKey ;
    private String accessKey ;

//配置`类
@Configuration
@EnableConfigurationProperties(MinioProperties.class)
// 开启通过实体类型封装配置文件中内容的功能
public class MinioConfiguration {
    @Autowired
    private MinioProperties minioProperties ;

    @Bean
    public MinioClient minioClient() {
        MinioClient minioClient = MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build() ;
        return minioClient ;
    }

    /**
     * 方法上所定义的参数,spring在调用该方法的时候会从spring容器中获取指定的对象,然后作为方法参数传递过来
     * @param minioProperties
     * @param minioClient
     * @return
     */
    @Bean//文件上传的内容抽取
    public FileUploadService fileUploadService(MinioProperties minioProperties , MinioClient minioClient) {
        return new FileUploadService(minioProperties , minioClient) ;
    }

}

然后通过@Import注解导入配置类或者(自定义注解)

自定义注解封装@Import注解导入配置类。

@Target(value = ElementType.TYPE)//限制自定义注解使用范围为类上
@Retention(value = RetentionPolicy.RUNTIME)//生效时期为运行时
@Import(value = MinioConfiguration.class)//导入
public @interface EnableMinio {
}

启动类加入自定义注解@EnableMinio既可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值