MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。使用 MinIO,你可以方便地进行文件的上传和下载操作。以下是如何使用 Java 和 MinIO 完成文件上传和下载功能的详细代码示例。
依赖
首先,你需要在项目中添加 MinIO 的依赖。假设你使用的是 Maven 项目,可以在 pom.xml
中添加以下依赖:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
上传文件
以下是一个使用 MinIO 上传文件的示例代码:
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.MinioException;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class MinioUploadExample {
public static void main(String[] args) {
try {
// 创建 MinioClient
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY")
.build();
// 上传文件
FileInputStream fileInputStream = new FileInputStream("path/to/your/file.txt");
minioClient.putObject(
PutObjectArgs.builder().bucket("your-bucket-name").object("file.txt").stream(
fileInputStream, fileInputStream.available(), -1)
.contentType("application/octet-stream")
.build());
fileInputStream.close();
System.out.println("File uploaded successfully.");
} catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
System.err.println("Error occurred: " + e);
}
}
}
下载文件
以下是一个使用 MinIO 下载文件的示例代码:
import io.minio.GetObjectArgs;
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class MinioDownloadExample {
public static void main(String[] args) {
try {
// 创建 MinioClient
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY")
.build();
// 下载文件
InputStream stream = minioClient.getObject(
GetObjectArgs.builder().bucket("your-bucket-name").object("file.txt").build());
FileOutputStream fileOutputStream = new FileOutputStream("path/to/downloaded/file.txt");
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = stream.read(buf)) != -1) {
fileOutputStream.write(buf, 0, bytesRead);
}
stream.close();
fileOutputStream.close();
System.out.println("File downloaded successfully.");
} catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
System.err.println("Error occurred: " + e);
}
}
}
代码解释
- MinioClient: 创建
MinioClient
实例,连接到 MinIO 服务器。你需要提供服务器的 URL、访问密钥和秘密密钥。 - 上传文件:
- 使用
PutObjectArgs.builder()
构建上传参数,包括桶名称、对象名称和文件流。 - 使用
minioClient.putObject()
方法上传文件。
- 使用
- 下载文件:
- 使用
GetObjectArgs.builder()
构建下载参数,包括桶名称和对象名称。 - 使用
minioClient.getObject()
方法获取文件流。 - 将文件流写入本地文件。
- 使用
注意事项
- 确保 MinIO 服务器正在运行,并且你提供的访问密钥和秘密密钥是正确的。
- 修改示例代码中的
"http://localhost:9000"
、"YOUR_ACCESS_KEY"
、"YOUR_SECRET_KEY"
、"your-bucket-name"
和文件路径为你的实际值。 - 处理异常时,确保捕获并处理
MinioException
、IOException
、NoSuchAlgorithmException
和InvalidKeyException
。