• MinIO简介和java Api的使用


    本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/02/minio-jian-jie-java-api.html

    MinIO是一个对象存储服务,非常轻量,也提供了多种语言的api,可以非常方便使用。

    存储桶

    minio中的bucket桶

    MinIO将存储空间分为多个部分,称为bucket桶,文件(对象)就存储在各个bucket桶中

    桶策略

    这些bucket桶可以根据用户的需要进行创建和删除。此外可以对每个bucket桶设置匿名用户访问的策略,具体策略说明如下:

    • ReadOnly – 允许匿名下载访问包括能够列出所需前缀的对象
    • WriteOnly – 允许匿名上传包括能够列出所需前缀的不完整上传
    • 读写 – 匿名访问以上载和下载所有对象
    • 无 – 是默认值(无策略),这意味着所有操作都需要针对所需的存储桶和前缀进行身份验证

    Java Api

    依赖:

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

    java api 通过一个http客户端进行存储和获取对象文件,所以java代码中可以通过以下的步骤进行存储和获取:

    1 实例化一个MinioClient客户端:

    MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);

    2 创建存储桶bucket:

                String bucket = "demo-bucket";
                boolean isExist = minioClient.bucketExists(bucket);
                if(isExist) {
                    LOGGER.info("Bucket {} already exists.", bucket);
                } else {
                    minioClient.makeBucket(bucket);
                }

    3 存储文件对象(需要指定存储的桶):

    minioClient.putObject(bucket, destFileName, file.getAbsolutePath());

    因为MinioClient使用http客户端,并不是长连接,所以不需要进行关闭连接和释放资源的操作。

    至此,文件已经存储完毕,可以在Minio服务器查询看到,bucket中的文件

    4 获取对象文件如下(获取输入流InputStream):

    
        public InputStream getStream(String bucket, String fileName) {
            InputStream is = null;
            try {
                MinioClient minioClient = ...; // 再实例化一个客户端
                is = minioClient.getObject(bucket, fileName);
            } catch(MinioException | NoSuchAlgorithmException | IOException | XmlPullParserException | InvalidKeyException e) {
                LOGGER.error("error: {}", e.getMessage());
            }
            return is;
        }

    如果需要获取File对象:

        public File getFile(String bucket, String fileName) {
            InputStream is = getStream(bucket, fileName);
            File dir = new File(tmpDir);
            if (!dir.exists() || dir.isFile()) {
                dir.mkdirs();
            }
            File file = new File(tmpDir + fileName);
            try {
                FileUtils.copyToFile(is, file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return file;
        }

    如果需要下载文件,可以直接将输入流写入servlet输出流即可:

    public void writeTo(String bucket, String fileName, OutputStream os) throws IOException {
        InputStream is = getStream(bucket, fileName);
        byte[] bytes = new byte[1024];
        int len;
        while ((len = is.read(bytes)) != -1) {
            os.write(bytes, 0, len);
        }
        os.flush();
    }

     

  • 相关阅读:
    SuiteCRM-7.7.6 (Ubuntu 16.04)
    Mautic-2.2.0 (Ubuntu 16.04)
    Limesurvey-2.55 (Ubuntu 16.04)
    视频会议20方100点 v2.66.1.18
    cuda和tensorflow对应关系
    pointnet++运行
    ubuntu使用anaconda安装tensorflow
    ubuntu安装搜狗输入法
    add the icon of the pycharm
    ubuntu中文界面改成英文界面
  • 原文地址:https://www.cnblogs.com/tangzeqi/p/13163461.html
Copyright © 2020-2023  润新知