如何使用AWS Java SDK的AwsS3Client对接MinIO存储(自定义端点与非默认配置)
用AWS SDK for Java/Scala对接MinIO实现文件上传(对应你的AWS CLI命令)
当然可行!MinIO完全兼容S3 API,所以用AWS SDK for Java(包括Scala)完全能实现和你那条CLI命令一模一样的操作。我来帮你把代码补全,同时对应CLI里的每一个参数来解释:
先明确你的CLI命令对应逻辑
你这条CLI命令:
aws --profile=minioplay --endpoint-url https://play.minio.io:9000 s3 cp logback.xml s3://miniohstest-jixusroqeb --debug
核心做了这几件事:
- 使用名为
minioplay的非默认AWS配置文件(加载对应的AccessKey/SecretKey) - 指向MinIO的自定义端点
https://play.minio.io:9000 - 把本地的
logback.xml上传到MinIO的miniohstest-jixusroqeb桶里
完整的Scala实现代码
import com.amazonaws.auth.profile.ProfileCredentialsProvider import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration import com.amazonaws.services.s3.AmazonS3ClientBuilder import java.io.File object MinioUploader { def main(args: Array[String]): Unit = { // 对应CLI的--profile=minioplay val credentialsProvider = new ProfileCredentialsProvider("minioplay") // 对应CLI的--endpoint-url val endpoint = "https://play.minio.io:9000" val region = "us-east-1" // MinIO对区域要求不严格,填任意合法AWS区域即可 val endpointConfig = new EndpointConfiguration(endpoint, region) // 构建S3客户端(兼容MinIO) val s3Client = AmazonS3ClientBuilder.standard() .withCredentials(credentialsProvider) .withEndpointConfiguration(endpointConfig) .withPathStyleAccessEnabled(true) // 关键!MinIO默认使用路径样式访问,必须开启 .build() // 对应CLI的cp命令:上传本地文件到MinIO桶 val bucketName = "miniohstest-jixusroqeb" val localFilePath = "logback.xml" val objectKey = "logback.xml" // 桶里的文件名称,和本地文件名一致即可,也可以自定义 try { s3Client.putObject(bucketName, objectKey, new File(localFilePath)) println("文件上传成功!") } catch { case e: Exception => println(s"上传失败:${e.getMessage}") } finally { s3Client.shutdown() // 记得关闭客户端释放资源 } } }
关键细节解释
- Profile加载:
ProfileCredentialsProvider("minioplay")会自动读取你本地~/.aws/credentials和~/.aws/config文件里对应minioplay配置的AccessKey和SecretKey,和你CLI用的是同一套凭证。 - Endpoint配置:
EndpointConfiguration需要传入端点URL和区域,MinIO不强制要求真实的AWS区域,所以填us-east-1这类通用值就行。 - 路径样式访问:
withPathStyleAccessEnabled(true)是必须的!因为AWS现在默认用虚拟主机样式(bucket.s3.amazonaws.com),但MinIO默认用路径样式(endpoint/bucket),如果不开启这个配置,会出现访问错误。 - 上传操作:
putObject方法对应CLI的cp命令,参数分别是桶名、桶内对象键、本地文件。
依赖配置(以SBT为例)
要运行这段代码,需要在你的build.sbt里添加AWS S3 SDK的依赖:
libraryDependencies += "com.amazonaws" % "aws-java-sdk-s3" % "1.12.500" // 可以用最新兼容版本
验证要点
- 确保你的
~/.aws/credentials文件里有minioplay的配置,格式如下:[minioplay] aws_access_key_id = YOUR_MINIO_ACCESS_KEY aws_secret_access_key = YOUR_MINIO_SECRET_KEY - 确认MinIO的桶
miniohstest-jixusroqeb已经存在(如果CLI能上传成功,那桶肯定是存在的)
内容的提问来源于stack exchange,提问作者takirala
相关产品推荐
相关产品推荐

