在使用 Amazon S3 和 Quarkus 时,我遇到了一个具有挑战性的问题,即无法识别或找到 S3 存储桶。这很令人困惑,因为所有配置和凭据似乎都是正确的。我仔细检查了 AWS 凭证和存储桶名称,以确保它们在 Quarkus 应用程序属性中准确设置。
然后,我查看了 Quarkus 文档,了解可能与标准 AWS SDK 用法不同的任何特定要求或配置。我想知道 Quarkus 中是否有其他步骤或配置用于与 S3 集成,例如特定的客户端自定义或策略设置。
确保设置正确后,我开始对网络和权限进行故障排除。我检查了 S3 存储桶是否位于与配置中指定的区域不同的区域,因为这可能会导致找不到该存储桶。我还验证了 IAM 角色和策略,以确保应用程序具有访问 S3 存储桶所需的权限。一切都配置正确,但总是出现相同的错误,即找不到存储桶。
我的应用程序.属性:
bucket.name=bucket-test-flower
quarkus.s3.aws.region=us-east-1
quarkus.s3.aws.credentials.type=static
quarkus.s3.aws.credentials.static-provider.access-key-id=my-key
quarkus.s3.aws.credentials.static-provider.secret-access-my-other-key
我的代码:
这里
public class S3SyncClientResource extends CommonResource {
@Inject
S3Client s3;
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(FormData formData) throws Exception {
System.out.println(bucketName);
System.out.println(formData.data);
System.out.println(formData.filename);
System.out.println(formData.mimetype);
if (formData.filename == null || formData.filename.isEmpty()) {
return Response.status(Status.BAD_REQUEST).build();
}
if (formData.mimetype == null || formData.mimetype.isEmpty()) {
return Response.status(Status.BAD_REQUEST).build();
}
PutObjectResponse putResponse = s3.putObject(buildPutRequest(formData),
RequestBody.fromFile(formData.data));
if (putResponse != null) {
return Response.ok().status(Status.CREATED).build();
} else {
return Response.serverError().build();
}
}
abstract public class CommonResource {
@ConfigProperty(name = "bucket.name")
protected
String bucketName;
protected PutObjectRequest buildPutRequest(FormData formData) {
return PutObjectRequest.builder()
.bucket(bucketName)
.key(formData.filename)
.contentType(formData.mimetype)
.build();
}
protected GetObjectRequest buildGetRequest(String objectKey) {
return GetObjectRequest.builder()
.bucket(bucketName)
.key(objectKey)
.build();
}
}
public class FormData {
@RestForm("file")
public File data;
@RestForm
@PartType(MediaType.TEXT_PLAIN)
public String filename;
@RestForm
@PartType(MediaType.TEXT_PLAIN)
public String mimetype;
}
错误:
software.amazon.awssdk.services.s3.model.NoSuchBucketException: The specified bucket does not exist (Service: S3, Status Code: 404, Request ID: 5a31b1b4-e4cf-449d-b307-78271669c94b, Extended Request ID: s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=)
仍然没有答案? 我也遇到同样的错误。
我想我知道问题是什么...... 在
docker ps
我看到 localstack/localstack:3.0.1
我怀疑在 dev mod s3client 中重新配置错误