You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:21