我正在使用AWS Credentials *连接到我的AWS S3。
final AmazonS3 s3 = new AmazonS3Client(
new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey*",
"secretKey")));
s3.setRegion(Region.US_West.toAWSRegion());
s3.setEndpoint("s3-us-west-1.amazonaws.com");
从我的本地主机,我可以上传图像,因为我启用了版本控制,所以我将版本ID恢复为以下行。
versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId();
PS 3:上面一段代码被包装在try-catch块中,catch块打印出来
You failed to upload fileName => fileName.jpeg (Permission denied)
但是如果我从我的ElasticBeanStalk执行相同的代码,我得到versionId = null并且图像不会上传到S3。
我没有看到凭据异常。
阅读完所有文档后,我创建了两个用户。 一个在我创建的组中,另一组没有组。
我使用了那些用户的accessKey,但我仍无法将图片上传到S3。
这就是我的存储桶政策的样子 创建两个用户后
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::someNumnber:user/username"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucketName"
}
]
}
在创建两个用户之前(当localhost成功将图像上传到S3时,以下设置就绪了)
{
"Version": "2012-10-17",
"Id": "Policy15",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bcktName",
"arn:aws:s3:::bcktName/*"
]
}
]
}
我对4个晚上的这个问题感到震惊。 请帮我。 我不使用boto或任何其他东西。 它是一个直接的war文件上传到tomcat,它必须将图像上传到S3。它适用于localhost,但不适用于S3。
PS:这就是我的CORS配置外观
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>20000</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
<ExposeHeader>x-amz-request-id</ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
PS 2:
我应该在访问控制列表中执行任何操作吗?截至目前,我看到所有者帐户与我整个AWS的用户名相同。我认为从本地工作的访问密钥和密钥也与所有者帐户相关。
答案 0 :(得分:0)
在Web配置文件中检查您的AWSAccessKey和AWSSecretKey。 Aws API使用这些凭据登录您的s3。
同样的问题在我看来也是如此,我这样解决了它。
希望这对任何人都有帮助。