根据Quarkus文档我无法成功连接到s3

问题描述 投票:0回答:1

根据 Quarkus 文档,我无法成功连接到 s3,但我可以通过 AWS CLI 连接到 s3。你也会遇到这样的问题吗

我使用了 Quarkus 文档 尝试在我的 Quarkus 项目中使用 s3,但无论我做什么,错误都会告诉我该存储桶不存在,但我可以使用 AWS CLI 将文件上传到该存储桶。

这是我的资源:

    @Path("/s3")
public class S3SyncClientResource extends CommonResource {
    @Inject
    S3Client s3;

    @POST
    @Path("upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(FormData formData) throws Exception {

        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();
        }
    }

    @GET
    @Path("download/{objectKey}")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response downloadFile(String objectKey) {
        ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(buildGetRequest(objectKey));
        ResponseBuilder response = Response.ok(objectBytes.asUtf8String());
        response.header("Content-Disposition", "attachment;filename=" + objectKey);
        response.header("Content-Type", objectBytes.response().contentType());
        return response.build();
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<FileObject> listFiles() {
        ListObjectsRequest listRequest = ListObjectsRequest.builder().bucket(bucketName).build();

        //HEAD S3 objects to get metadata
        return s3.listObjects(listRequest).contents().stream()
                .map(FileObject::from)
                .sorted(Comparator.comparing(FileObject::getObjectKey))
                .collect(Collectors.toList());
    }
}

    abstract public class CommonResource {
      @ConfigProperty(name = "bucket.name")
      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();
    }

}

这是我的应用程序。属性:

quarkus.s3.aws.region=ap-northeast-2
quarkus.s3.aws.credentials.type=default
quarkus.s3.aws.credentials.type=default

这是我的pom.xml

  <dependencies>
<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>url-connection-client</artifactId>
</dependency>
<dependency>
  <groupId>io.quarkiverse.amazonservices</groupId>
  <artifactId>quarkus-amazon-s3</artifactId>
</dependency>
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
</dependency>
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-resteasy-reactive</artifactId>
</dependency>
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-junit5</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>io.rest-assured</groupId>
  <artifactId>rest-assured</artifactId>
  <scope>test</scope>
</dependency>

我确信我配置了 .aws/credentials 并且我可以使用 aws cli 将我的文件上传到我的存储桶,但是当我尝试使用此上传 api 时,它会出现这个错误:

 software.amazon.awssdk.services.s3.model.NoSuchBucketException: The specified bucket does not exist (Service: S3, Status Code: 404, Request ID: d436fe05-9929-434a-94ed-42e5f50c5a0f, Extended Request ID: s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=)

我确保这个桶存在!!

amazon-web-services amazon-s3
1个回答
0
投票

指南中没有详细记录,但您必须禁用开发服务。默认情况下,它设置为 true,因此它启动自己的本地 S3 服务:https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-s3.html#quarkus-amazon-s3_quarkus-启用 s3-devservices

确保在您的

application.properties
文件中设置此项

quarkus.s3.devservices.enabled=false
© www.soinside.com 2019 - 2024. All rights reserved.