我也有端口号,但我没有找到在哪里设置它。我该如何解决这个问题?通过 python 的“boto”客户端,我成功连接到我的服务,但在 Scala 上它总是返回禁止消息。
object a extends App{
import com.amazonaws.auth.BasicAWSCredentials
val accessKey = "myAccessKey"
val secretKey = "mySecretKey"
val credentials = new BasicAWSCredentials(accessKey, secretKey)
import com.amazonaws.services.s3.AmazonS3Client
val s3client = new AmazonS3Client(credentials)
s3client.setEndpoint("address")
val s3object = s3client.getObject("myBucket", "file.txt")
println(s3object.getKey, s3object.getObjectMetadata.getLastModified)
}
这是错误日志:
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null; S3 Extended Request ID: null), S3 Extended Request ID: null
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1639)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4319)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4266)
at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1406)
at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1267)
at a$.delayedEndpoint$a$1(a.scala:17)
at a$delayedInit$body.apply(a.scala:3)
at scala.Function0.apply$mcV$sp(Function0.scala:34)
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:389)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at a$.main(a.scala:3)
at a.main(a.scala)
最佳答案
AWS SDK 在某种程度上不鼓励使用端点
( JavaDoc ):
Only use this if using a non-standard service endpoint - the recommended approach for configuring a client is to use {@link #withRegion(String)}
相反,请使用withRegion
:
import com.amazonaws.auth.{AWSStaticCredentialsProvider, BasicAWSCredentials}
import com.amazonaws.regions.Regions
import com.amazonaws.services.s3.AmazonS3Client
AmazonS3Client.builder()
.withCredentials(new AWSStaticCredentialsProvider(
new BasicAWSCredentials("accessKey", "secretKey")))
.withRegion(Regions.EU_WEST_1).build()
关于java - 无法连接到 scala 上的 Amazon S3。 Python 连接运行良好,但在 Scala 上我收到 403 Forbidden 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551828/