SpringCloud 项目整合 minio

说在前面的话

项目当中经常会遇到要上传什么东西,或者下载的问题. 
所以OSS对象存储就这样诞生了,比如说阿里云的对象存储几块钱一个月.
但是有的公司因为要存的东西有点奇特,存放在这些云上可能第二天大家都要提桶跑路了.
所以能把这些东西放在一个自己认为安全的地方. 然后就是各种各样的文件存储系统就出现了.

minio是什么?

minio是一个分布式对象存储服务器,用GO语言编写
简单的说,这个和你用的阿里云的OSS差不多,都是调用SDK做文件对象的CRUD

你真的需要了解这个的原理嘛?

去淘宝买个东西,会有人会去专门去研究淘宝的架构原理,怎么玩中间件,数据怎么备份嘛?

怎么玩了? 当然下载安装就OK了

https://min.io/ 下载吧

正篇开始!

1,在项目的POM.xml里添加 maven依赖

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

2,写一个工具类

public class OSSUtils {
	    protected static String url;
    protected static String accessKey;
    protected static String secretKey;

    static {
        secretKey = "YjyhNOyCRGNsgSMOPm+EIFuUuC2onlYFqaP16Bhr";
        url = "http://127.0.0.1:9000";
        accessKey = "UJU01UFAQJ3USV6CI74W";
    }
// 通过流上传一个文件 MultipartFile 只要在controller接收就好,是前端发过来的,
// myBucketname 是文件存放在那个文件夹(桶)里面
// multipartFile.getOriginalFilename() 这个是文件的名字 .
public static String fileUploader(MultipartFile multipartFile, String myBucketname) throws DHException {
        try {
            MinioClient mc = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
            if (!mc.bucketExists(BucketExistsArgs.builder().bucket(myBucketname).build()))
                mc.makeBucket(MakeBucketArgs.builder().bucket(myBucketname).build());
                
            mc.putObject(
                    PutObjectArgs.builder().bucket(myBucketname).object(multipartFile.getOriginalFilename()).stream(
                            multipartFile.getInputStream(), multipartFile.getSize(), -1)
                            .contentType(multipartFile.getContentType())
                            .build());

            return mc.statObject(StatObjectArgs.builder().
            bucket(myBucketname).
            object(multipartFile.getOriginalFilename()).build()).toString();
        } catch (MinioException | NoSuchAlgorithmException | IOException | InvalidKeyException e) {
            throw new DHException();
        }
    }
	// 通过文件名 和 文件夹(桶) 名字删除一个对象
    public static void deleteObject(String objectname, String myBucketname) throws DHException {
        MinioClient minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
        try {
            minioClient.removeObject(RemoveObjectArgs.builder().bucket(myBucketname).object(objectname).build());
        } catch (Exception e) {
            throw new DHException(LanguageResultCodeEnum.DELETE_OBJECT_ERROR.getMessage(), LanguageResultCodeEnum.DELETE_OBJECT_ERROR.getValue());
        }
    }
    // 文件下载
    public static void downloadFile(HttpServletResponse response, String objectname, String myBucketname) throws DHException {
        try {
            MinioClient minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
            InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(myBucketname).object(objectname).build());
            response.setHeader("Content-Disposition", "attachment;filename=" + objectname);
            response.setContentType("application/force-download");
            response.setCharacterEncoding("UTF-8");
            IoUtil.copy(inputStream, response.getOutputStream());
        } catch (Exception e) {
            throw new DHException(LanguageResultCodeEnum.FILE_DOWNLOAD_ERROR.getMessage(), LanguageResultCodeEnum.FILE_DOWNLOAD_ERROR.getValue());
        }
    }
}

好了,这样就可以用了 . 是不是很完美!
也可以继续完善,或者直接调用你的工具类.
如果还有不懂的地方请加群解答.
967489688

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值