MinIO快速入门及在项目中的应用


MinIO 是一款高性能的对象存储软件,兼容 Amazon S3 API,非常适合用于部署私有云存储解决方案。

1. 下载 MinIO

首先,下载 MinIO 服务器和客户端(mc)。MinIO 为多种平台提供了预编译的二进制文件。

对于 Linux 和 macOS 用户:

可以通过运行以下命令来下载 MinIO 服务器和客户端 mc:

curl https://dl.min.io/server/minio/release/linux-amd64/minio -o minio
curl https://dl.min.io/client/mc/release/linux-amd64/mc -o mc

chmod 755 minio mc
对于 Windows 用户:

可以从 MinIO 官方网站下载 Windows 版本的二进制文件,并解压到一个目录。

2. 启动 MinIO 服务器

假设已经有一个本地目录 /tmp/data 作为存储桶的数据目录,可以启动 MinIO 服务器如下:

./minio server /tmp/data

如果使用的是 Windows,命令将是:

minio.exe server C:\path\to\data

这将会启动一个 MinIO 服务器,监听默认端口 9000。

3. 使用 MinIO 客户端 (mc)

安装环境变量

为了方便使用 mc 命令,需要设置一些环境变量:

export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
初始化 mc

接下来初始化 mc,指定阿里云存储的地址、访问密钥和密钥密码:

./mc config host add myminio http://localhost:9000 minioadmin minioadmin
列出存储桶

使用 ls 命令查看当前没有存储桶:

./mc ls myminio
创建存储桶

创建一个新的存储桶 mybucket

./mc mb myminio/mybucket
上传文件

上传一个文件到存储桶 mybucket 中:

./mc cp /path/to/local/file myminio/mybucket/myfile
下载文件

从存储桶 mybucket 下载文件到本地:

./mc cp myminio/mybucket/myfile /path/to/local/destination
查看文件列表

列出存储桶 mybucket 中的所有文件:

./mc ls myminio/mybucket

4. 使用浏览器访问 MinIO 控制台

MinIO 提供了一个 Web 控制台界面,可以通过浏览器访问:

  • 打开浏览器,输入 http://localhost:9000/minio
  • 登录页面,使用用户名 minioadmin 和密码 minioadmin 登录。

5. 在项目中的应用

在Java项目中使用MinIO可以非常方便地集成对象存储功能。下面是在Java项目中使用MinIO的快速入门指南,包括如何设置依赖、连接MinIO服务器、创建存储桶、上传文件等操作。

5.1. 添加MinIO依赖

要在Java项目中使用MinIO,首先需要在项目的pom.xml文件中添加MinIO客户端库的依赖。

<dependencies>
    <!-- MinIO Java SDK -->
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.9.0</version>
    </dependency>
</dependencies>
5.2. 连接MinIO服务器

创建一个MinioClient实例,指定MinIO服务器的URL、访问密钥和密钥密码。

import io.minio.MinioClient;

public class MinioClientExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";

        try {
            MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
5.3. 创建存储桶

使用makeBucket方法创建一个名为mybucket的新存储桶。

import io.minio.MinioClient;
import io.minio.errors.MinioException;

public class CreateBucketExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "mybucket";

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

            // 创建存储桶
            minioClient.makeBucket(bucketName);
        } catch (MinioException e) {
            System.err.println("Error occurred: " + e);
        }
    }
}
5.4. 上传文件

使用putObject方法将一个本地文件上传到存储桶中。

import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.MinioException;

import java.io.File;

public class UploadFileExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "mybucket";
        String objectName = "testfile.txt";
        File file = new File("/path/to/testfile.txt");

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

            // 上传文件
            minioClient.putObject(PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .filename(file.getAbsolutePath())
                    .build());
        } catch (MinioException e) {
            System.err.println("Error occurred: " + e);
        }
    }
}
5.5. 下载文件

使用getObject方法从存储桶中下载文件。

import io.minio.MinioClient;
import io.minio.GetPresignedObjectUrlArgs;
import io.minio.errors.MinioException;

import java.io.File;
import java.net.URL;

public class DownloadFileExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "mybucket";
        String objectName = "testfile.txt";
        String downloadPath = "/path/to/downloaded/file.txt";

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

            // 获取文件下载链接
            URL url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                    .method(Method.GET)
                    .bucket(bucketName)
                    .object(objectName)
                    .build());

            // 下载文件
            // 使用 Java IO 或其他方式从 URL 下载文件到本地
            // 这里仅展示获取 URL 的过程
            System.out.println("Download URL: " + url);
        } catch (MinioException e) {
            System.err.println("Error occurred: " + e);
        }
    }
}
5.6. 列出存储桶中的对象

使用listObjects方法列出存储桶中的所有对象。

import io.minio.MinioClient;
import io.minio.errors.MinioException;

import java.util.List;
import java.util.stream.Collectors;

public class ListObjectsExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "mybucket";

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

            // 列出存储桶中的所有对象
            List<String> objects = minioClient.listObjects(bucketName).stream()
                    .map(io.minio.ObjectListing.Item::objectName)
                    .collect(Collectors.toList());
            
            System.out.println("Objects in bucket: " + objects);
        } catch (MinioException e) {
            System.err.println("Error occurred: " + e);
        }
    }
}
5.7. 删除对象

使用removeObject方法删除存储桶中的对象。

import io.minio.MinioClient;
import io.minio.RemoveObjectArgs;
import io.minio.errors.MinioException;

public class DeleteObjectExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "mybucket";
        String objectName = "testfile.txt";

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

            // 删除对象
            minioClient.removeObject(RemoveObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .build());
        } catch (MinioException e) {
            System.err.println("Error occurred: " + e);
        }
    }
}
5.8. 删除存储桶

使用removeBucket方法删除存储桶。

import io.minio.MinioClient;
import io.minio.RemoveBucketArgs;
import io.minio.errors.MinioException;

public class DeleteBucketExample {
    public static void main(String[] args) throws Exception {
        String endpoint = "http://localhost:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "mybucket";

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

            // 删除存储桶
            minioClient.removeBucket(RemoveBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (MinioException e) {
            System.err.println("Error occurred: " + e);
        }
    }
}
好的,我理解了你的问题。如果你想在 SpringBoot 应用使用 Minio 作为云存储服务,可以按照以下步骤进行操作: 1. 添加 Minio 客户端依赖 在 `pom.xml` 文件添加 Minio 客户端依赖: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.2.1</version> </dependency> ``` 2. 配置 Minio 客户端 在 `application.properties` 文件添加以下配置: ```properties minio.url=http://localhost:9000 minio.access-key=minio minio.secret-key=minio123 minio.bucket-name=my-bucket ``` 其,`minio.url` 是 Minio 服务的访问地址,`minio.access-key` 和 `minio.secret-key` 是访问 Minio 服务的凭证,`minio.bucket-name` 是存储对象的桶名称。 3. 实现上传文件接口 ```java @RestController public class FileController { @Autowired private MinioClient minioClient; @PostMapping("/files") public String uploadFile(@RequestParam("file") MultipartFile file) throws Exception { String fileName = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); long size = file.getSize(); String contentType = file.getContentType(); minioClient.putObject(PutObjectArgs.builder() .bucket("my-bucket") .object(fileName) .stream(inputStream, size, -1) .contentType(contentType) .build()); return "File uploaded successfully: " + fileName; } } ``` 4. 实现展示图片接口 ```java @RestController public class ImageController { @Autowired private MinioClient minioClient; @GetMapping("/images/{fileName}") public ResponseEntity<byte[]> getImage(@PathVariable String fileName) throws Exception { InputStream inputStream = minioClient.getObject(GetObjectArgs.builder() .bucket("my-bucket") .object(fileName) .build()); byte[] bytes = IOUtils.toByteArray(inputStream); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.IMAGE_JPEG); headers.setContentLength(bytes.length); return new ResponseEntity<>(bytes, headers, HttpStatus.OK); } } ``` 在这个示例,我们定义了一个 `FileController` 和一个 `ImageController`,分别用于上传文件和展示图片。其,`ImageController` 的 `getImage` 方法根据文件名从 Minio 服务获取图片,并返回 `ResponseEntity<byte[]>` 对象,该对象包含图片的二进制数据和响应头信息,用于在浏览器展示图片。 以上就是在 SpringBoot 应用使用 Minio 作为云存储服务的步骤。希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值