添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本文出自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,