minio的docker安装以及 java api的使用

什么是minio

minio官网

MinIO是根据Apache许可证v2.0发布的高性能对象存储。它与Amazon S3云存储服务兼容。使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。
它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB
Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。

为什么选择它

个人而言安装简单,快速测试

二进制安装dengdeng~

minio 的docker安装

检索镜像

docker search minio
检索minio docker镜像

拉取镜像

docker pull minio/minio

运行前准备工作

设置自定的数据目录,可以根据自己的习惯设置

mkdir /data/docker-config/docker-minio/data
自定义宿主机存储目录

启动镜像

docker run --name minio -v /data/docker-conf/docker-minio/data:/data -p 7900:9000 --privileged=true -d minio/minio server /data

web 客户端

登录界面

获取秘钥

docker logs minio 下面红线部分为登录秘钥
获取秘钥

登录

主控界面

设置链接永久生效

在这里插入图片描述
添加如下参数
在这里插入图片描述
右下角+号为创建桶以及上传文件选项

修改秘钥

cd /data/docker-conf/docker-minio/data
ls -al 
cd .minio.sys/config

config.json已经被我格式化
在这里插入图片描述

java API 的使用 + spring boot

application.yml

server:
  port: 8001
os:
  minio:
    url: http://localhost:7900
    secretKey: minioadmin
    accessKey: minioadmin
multipart:
  maxRequestSize: 100MB
  maxFileSize: 10MB

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>7.0.2</version>
        </dependency>
    </dependencies>

code

service 测试代码异常上抛

/**
 * 文件上传
 */
@Service
public class MinioFileUpload {
    /*URL*/
    @Value("${os.minio.url}")
    private  String endpoint;

    /*访问密钥*/
    @Value("${os.minio.accessKey}")
    private  String accessKey;

    /*秘钥*/
    @Value("${os.minio.secretKey}")
    private  String secretKey;

    /**
     * 获取文件url
     * @throws IOException
     * @throws InvalidKeyException
     * @throws InvalidResponseException
     * @throws InsufficientDataException
     * @throws NoSuchAlgorithmException
     * @throws InternalException
     * @throws XmlParserException
     * @throws InvalidBucketNameException
     * @throws ErrorResponseException
     * @throws RegionConflictException
     */
    public void select() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException, RegionConflictException, InvalidPortException, InvalidEndpointException {
        //实例化客户端
        MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey);
        String image = minioClient.getObjectUrl("image", "e0ebc697-9798-4c5c-be3b-272bb175dcb4.jpg");
        System.out.println("-----:"+image);
    }

    /**
     * 上传文件流
     * @param bucketName
     * @param objectName 避免对象名称重复
     * @param multipartFile
     * @throws IOException
     * @throws InvalidKeyException
     * @throws InvalidResponseException
     * @throws InsufficientDataException
     * @throws NoSuchAlgorithmException
     * @throws InternalException
     * @throws XmlParserException
     * @throws InvalidBucketNameException
     * @throws ErrorResponseException
     * @throws RegionConflictException
     */
    public int uploadByStream(String bucketName, String objectName, MultipartFile multipartFile) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException, RegionConflictException {

        //基础参数是否为空
        if (null == bucketName
                || "".equals(bucketName)
                || null == objectName
                || "".equals(objectName)
                || null == multipartFile
                || multipartFile.isEmpty()){
            return 0;
        }
        //获取文件流
        InputStream inputStream = multipartFile.getInputStream();
        try {
            //实例化客户端
            MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey);
            //检查桶是否存在
            boolean isExist = minioClient.bucketExists(bucketName);
            if (isExist){
                System.err.println("桶已经存在");
            }else {
                //新建桶
                minioClient.makeBucket(bucketName);
            }
            PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(),-1);
            //上传数据类型
            putObjectOptions.setContentType(multipartFile.getContentType());
            //上传文件
            minioClient.putObject(bucketName, objectName, inputStream, putObjectOptions);
            inputStream.close();
            System.err.println("上传成功");
            return 1;
        } catch (InvalidEndpointException e) {
            e.printStackTrace();
        } catch (InvalidPortException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

controller 测试代码异常上抛

/**
 * 文件管理
 */
@RestController
@RequestMapping("/os/minio/")
public class MinioFileManageController {

    @Autowired
    private MinioFileUpload minioFileUpload;

    @PostMapping("upload")
    public int upload(@RequestParam("file") MultipartFile multipartFile){
        UUID uuid = UUID.randomUUID();
        try {
           return minioFileUpload.uploadByStream("image",uuid.toString()+".jpg",multipartFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidResponseException e) {
            e.printStackTrace();
        } catch (InsufficientDataException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InternalException e) {
            e.printStackTrace();
        } catch (XmlParserException e) {
            e.printStackTrace();
        } catch (InvalidBucketNameException e) {
            e.printStackTrace();
        } catch (ErrorResponseException e) {
            e.printStackTrace();
        } catch (RegionConflictException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @PostMapping("test")
    public int test(){
        try {
            minioFileUpload.select();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidResponseException e) {
            e.printStackTrace();
        } catch (InsufficientDataException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InternalException e) {
            e.printStackTrace();
        } catch (XmlParserException e) {
            e.printStackTrace();
        } catch (InvalidBucketNameException e) {
            e.printStackTrace();
        } catch (ErrorResponseException e) {
            e.printStackTrace();
        } catch (RegionConflictException e) {
            e.printStackTrace();
        } catch (InvalidPortException e) {
            e.printStackTrace();
        } catch (InvalidEndpointException e) {
            e.printStackTrace();
        }
        return 1;
    }
}

postMan测试

在这里插入图片描述
在这里插入图片描述
结果在web界面查看
emmm~~吃饭了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值