下面是详细的攻略过程。
使用 Minio 存储文件
Minio是一个分布式对象存储服务,除了能提供文件存储、数据备份和归档之外,还能快速实现容量扩展。
使用 Minio 前需要先创建一个存储桶。
val minioEndpoint: String
val minioAccessKey: String
val minioSecretKey: String
val minioRegion: String
val minioBucket: String
val s3Client = AmazonS3ClientBuilder
.standard()
.withEndpointConfiguration(
EndpointConfiguration(minioEndpoint, minioRegion)
)
.withCredentials(
AWSStaticCredentialsProvider(
BasicAWSCredentials(minioAccessKey, minioSecretKey)
)
).build()
if (!s3Client.doesBucketExistV2(minioBucket)) {
s3Client.createBucket(CreateBucketRequest(minioBucket)
.withCannedAcl(CannedAccessControlList.PublicRead))
}
将以上代码写入到配置文件中即可创建 Minio 存储桶。
第一个示例代码
使用 Minio 进行文件上传和下载操作。在Spring Boot框架中,我们可以使用Java文件服务器client来上传或下载文件。
Java 文件服务器 client 的版本信息以及引入方式如下:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.0.3</version>
</dependency>
完成该框架的版本引入后,我们可以使用以下代码实现上传和下载文件的操作:
@Service
public class MinioService {
private final MinioClient minioClient;
public MinioService(MinioClient minioClient) {
this.minioClient = minioClient;
}
private static final String DEFAULT_BUCKET_NAME = "default";
private static final String DEFAULT_ENDPOINT = "http://127.0.0.1:9000";
private static final String DEFAULT_ACCESSKEY = "minioadmin";
private static final String DEFAULT_SECRETKEY = "minioadmin";
// 创建 default bucket
public void createDefaultBucket() {
if (!isBucketExist(DEFAULT_BUCKET_NAME)) {
try {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(DEFAULT_BUCKET_NAME).build());
} catch (Exception e) {
throw new RuntimeException("创建默认存储桶失败: " + DEFAULT_BUCKET_NAME);
}
}
}
// 查看 bucket 是否存在
public boolean isBucketExist(String bucketName) {
try {
return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
} catch (Exception e) {
return false;
}
}
// 上传文件到默认 bucket
public void putString(String fileName, String content) {
try {
var bytes = content.getBytes(StandardCharsets.UTF_8);
var metadata = new ObjectMetadata();
metadata.setContentType(MediaType.TEXT_PLAIN_VALUE);
metadata.setContentLength(bytes.length);
var stream = new ByteArrayInputStream(bytes);
var arg = PutObjectArgs.builder().bucket(DEFAULT_BUCKET_NAME).object(fileName).stream(stream, bytes.length, -1)
.contentType(MediaType.TEXT_PLAIN_VALUE).build();
minioClient.putObject(arg);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 下载一个文件到字符串
public String getObjectAsString(String fileName) {
try {
var obj = minioClient.getObject(GetObjectArgs.builder().bucket(DEFAULT_BUCKET_NAME).object(fileName).build());
var inputStream = obj.readAllBytes();
return new String(inputStream, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
以上代码实现了一个 MinioService
服务类,我们可以向其中注入 MinioClient
,并提供以下方法:
createDefaultBucket()
方法会检查 default bucket 是否存在,如果不存在,则创建一个 default bucket;isBucketExist(String bucketName)
方法会查询指定名称的 bucket 是否存在;putString(String fileName, String content)
方法会将字符串content
上传到指定的 bucket;getObjectAsString(String fileName)
方法会从 bucket 中下载指定的文件,并返回其内容的字符串。
使用该服务类的示例代码如下:
@RestController
@RequestMapping("/api/minio")
public class MinioExampleController {
private final MinioService minioService;
public MinioExampleController(MinioService minioService) {
this.minioService = minioService;
}
@GetMapping("/echo/{id}")
public String echo(@PathVariable String id) {
minioService.createDefaultBucket();
minioService.putString("echo", id);
return minioService.getObjectAsString("echo");
}
}
以上代码创建一个使用 Spring Boot 框架的 REST 接口服务,/api/minio/echo/{id} 路由接受一个参数 id。它调用 MinioService
的 createDefaultBucket()
方法,确保存储桶存在。然后使用 MinioService
的 putString("echo", id)
方法将 id 存储为字符串。接下来使用 getObjectAsString("echo")
方法从存储桶中获取存储的字符串。最后返回获取的结果。
第二个示例代码
该示例代码展示了如何使用 Minio 实现文件的上传和下载操作。首先我们需要使用 MinioClient 客户端连接到 minio 服务器。
MinioClient minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
以上代码创建了一个新的 MinioClient
,其中包含了 minio 服务器的 IP、AK、SK 等信息。
- 文件上传
使用以下代码将文件上传到 Minio。
public void putObject(String bucketName, String objectName, String filePath, String contentType) throws IOException, InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, InvalidKeyException, NoResponseException, ErrorResponseException, InternalException, InvalidArgumentException, RegionConflictException {
File file = new File(filePath);
try {
File file1 = new File(filePath);
FileInputStream fis = new FileInputStream(file1);
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType(contentType);
PutObjectRequest request = new PutObjectRequest(bucketName, objectName, fis, meta);
minioClient.putObject(request);
} catch (Exception e) {
e.printStackTrace();
}
}
- 文件下载
使用以下代码从 Minio 下载文件。
public void getObject(String bucketName, String objectName, String path) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, NoResponseException, ErrorResponseException, InternalException, InvalidArgumentException {
File file = new File(path);
minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build(), file.toPath());
}
在以上示例代码中,上传和下载文件时都要指定存储桶的名称,也要指定文件的名称,因此我们首先需要在 Minio 上创建一个存储桶。
minioClient.makeBucket(MakeBucketArgs.builder().bucket("download").build());
以上代码将在 Minio 上创建一个名称为 download 的存储桶。
我们可以使用以下示例代码将文件上传到 Minio 上。
String bucketName = "download";
String objectName = "demo.txt";
String filePath = "D:/webgl/three-js-first-demo/guid.js";
String contentType = "text/plain";
minioService.putObject(bucketName, objectName, filePath, contentType);
以上示例代码将本地文件 D:/webgl/three-js-first-demo/guid.js
上传到 Minio 存储桶 download
中,并给文件取名为 demo.txt
。
接下来,我们可以使用以下示例代码从 Minio 上下载文件。
String bucketName = "download";
String objectName = "demo.txt";
String filePath = "D:/demo.txt";
minioService.getObject(bucketName, objectName, filePath);
以上示例代码从 Minio 存储桶 download
中下载文件 demo.txt
并存储到本地的文件 D:/demo.txt
。
至此,这两个示例代码就完成了上传文件和下载文件的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot 使用 minio的示例代码 - Python技术站