springboot 集成minio

  • 安装minio
#docker 安装方法,环境centos7

1. docker search minio
2. docker pull minio/minio   #安装最新版本的minio
3. docker pull minio/minio:tag   #安装指定版本的minio
4. docker run -d -p 9000:9000 -p 9001:9001 -v /data1:/data1 -v /data2:/data2 -v /data3:/data3  -v /data4:/data4  -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin minio/minio server /data1 /data2 /data3 /data4 --console-address ":9001"

#其中端口9000 为minio server暴露的端口,9001 为minio 控制台暴露的端口




docker安装方法

创建bucket桶

  • springboot集成minio

添加maven依赖

<!-- minio 依赖 -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.3.5</version>
</dependency>
<!-- okhttp依赖 -->
<dependency>
	<groupId>com.squareup.okhttp3</groupId>
	<artifactId>okhttp</artifactId>
	<version>4.9.1</version>
</dependency>

配置application.properties

minio.url=http://你的IP:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucket=test

 向spring容器中注入bean

@Data
@Configuration
public class MinIoConfig {
    @Value("${minio.url}")
    private String url;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    @Value("${minio.bucket}")
    private String bucketNameImage ;

    @Bean
    public MinioClient minioClient(){
        MinioClient minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).region("china").build();
        return minioClient;
    }


}

编写服务类

@Slf4j
@Component
public class MinIoServiceImpl implements MinIoService {

    @Autowired
    private MinIoConfig minioConfig;
    @Autowired
    private MinioClient minioClient;

    //获取列表
    @Override
    public List<String> listObjects() {
        List<String> list=new ArrayList<>();
        try {

            ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder()
                    .bucket(minioConfig.getBucketNameImage())
                    .build();

            Iterable<Result<Item>> results =minioClient.listObjects(listObjectsArgs);
            for (Result<Item> result : results) {
                Item item = result.get();
                log.info(item.lastModified() + ", " + item.size() + ", " + item.objectName());
                list.add(item.objectName());
            }
        }catch (Exception e){
            log.error("错误:"+e.getMessage());
        }
        return list;
    }

    //删除
    @Override
    public void deleteObject(String objectName) {
        try {
            RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
                    .bucket(minioConfig.getBucketNameImage())
                    .object(objectName)
                    .build();
            minioClient.removeObject(removeObjectArgs);
        }catch (Exception e){
            log.error("错误:"+e.getMessage());
        }
    }

    //上传
    @Override
    public void uploadObject(InputStream is,String fileName,String contentType) {
        try {
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(minioConfig.getBucketNameImage())
                    .object(fileName)
                    .contentType(contentType)
                    .stream(is, is.available(), -1)
                    .build();
            minioClient.putObject(putObjectArgs);
            is.close();
        }catch (Exception e){
            log.error("错误:"+e.getMessage());
        }
    }

    @Override
    public String uploadObject(String bucketName, MultipartFile file) {
        final InputStream is;
        try {
            is = file.getInputStream();
            final String fileName = file.getOriginalFilename();
            minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).stream(is,is.available(), -1).object("image/"+fileName).build());
            is.close();
            return getObjectUrl(fileName);
        } catch (Exception e) {
            log.error("错误:"+e.getMessage());

            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取minio文件的下载地址
     *
     * @param bucketName:
     *            桶名
     * @param fileName:
     *            文件名
     * @return: java.lang.String
     * @date : 2020/8/16 22:07
     */
    public String getFileUrl(String bucketName, String fileName) {
        try {
            return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(fileName).build());
        } catch (Exception e) {
            log.error("错误:"+e.getMessage());

            e.printStackTrace();
        }
        return null;
    }


    //获取minio中地址
    @Override
    public String getObjectUrl(String objectName){
        try {
            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
                    .method(Method.GET)
                    .bucket(minioConfig.getBucketNameImage())
                    .object(objectName)
                    .expiry(7, TimeUnit.DAYS)
                    .build();
            return minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
        }catch (Exception e){
            e.printStackTrace();
            log.error("错误:"+e.getMessage());
        }
        return "";
    }



    //下载minio服务的文件
    @Override
    public InputStream getObject(String objectName){
        try {
            GetObjectArgs getObjectArgs = GetObjectArgs.builder()
                    .bucket(minioConfig.getBucketNameImage())
                    .object(objectName)
                    .build();
            return minioClient.getObject(getObjectArgs);
        }catch (Exception e){
            log.error("错误:"+e.getMessage());
        }
        return null;
    }

    @Override
    public void createBucket(String bucketName) {
        try {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        } catch (Exception e){
            log.error("错误:"+e.getMessage());
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值