我尝试使用以下代码创建一个存储桶:
我使用的S3后端是minio
runCatching {
bucket = configuration.getString("storage.bucket")
s3Client = AmazonS3Client.builder()
.withEndpointConfiguration(AwsClientBuilder.EndpointConfiguration("${configuration.getString("storage.endpoint")}:${configuration.getInt("storage.port")}", ""))
.withCredentials(AWSStaticCredentialsProvider(BasicAWSCredentials(configuration.getString("storage .credentials.accessKey"), configuration.getString("storage.credentials.accessToken"))))
.withPayloadSigningEnabled(false)
.withClientConfiguration(ClientConfiguration().withProtocol(if(configuration.getBoolean("storage.ssl")) { Protocol.HTTPS } else { Protocol.HTTP }))
.build()
s3Client.createBucket(CreateBucketRequest(bucket)) // Exception: com.amazonaws.SdkClientException: Unable to execute HTTP request: usercontent.localhost
// Exception: Caused by: java.net.UnknownHostException: usercontent.localhost
}.onFailure {
it.printStackTrace()
exitProcess(0)
}
}
为什么创建bucket会向usercontent.localhost发送请求? 如何创建存储桶?
最佳答案
您好,我遇到了完全相同的问题,解决方案非常简单。
您可以在本期中找到更多详细信息:https://github.com/localstack/localstack/issues/43
这是您的编码修复:
runCatching {
bucket = configuration.getString("storage.bucket")
s3Client = AmazonS3Client.builder()
.withEndpointConfiguration(AwsClientBuilder.EndpointConfiguration("${configuration.getString("storage.endpoint")}:${configuration.getInt("storage.port")}", ""))
.withCredentials(AWSStaticCredentialsProvider(BasicAWSCredentials(configuration.getString("storage .credentials.accessKey"), configuration.getString("storage.credentials.accessToken"))))
.withPayloadSigningEnabled(false)
.withClientConfiguration(ClientConfiguration().withProtocol(if(configuration.getBoolean("storage.ssl")) { Protocol.HTTPS } else { Protocol.HTTP }))
.withPathStyleAccessEnabled(true) // YOU HAVE TO ADD THIS
.build()
s3Client.createBucket(CreateBucketRequest(bucket)) // Exception: com.amazonaws.SdkClientException: Unable to execute HTTP request: usercontent.localhost
// Exception: Caused by: java.net.UnknownHostException: usercontent.localhost
}.onFailure {
it.printStackTrace()
exitProcess(0)
}
}
使用此选项,您可以避免在 dns (usercontent.localhost) 请求中使用存储桶名称,而是使用路径样式 (localhost/usercontent)。
关于amazon-web-services - AWS S3 java SDK : Can't create bucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68233468/