首页 > 解决方案 > 生成的预签名 URL 的指定存储桶不存在

问题描述

当我为 S3 资源生成预签名 url 时,它给了我这样的 url: https ://s3.us-west-1.amazonaws.com/some_test_bucket/0020f388-b013-425d-812f-e972ee86d08e%3A%3A67 %3A%3A0?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20210611T053136Z&X-Amz-SignedHeaders=host&X-Amz-Expires=431999&X-Amz-Credential=AKIAV762SFL5NCPMVSEU%2F20210611%2Fus-west-1%2F %2Faws4_request&X-Amz-Signature=b8da16f92862faf9934d31f508050ea99da37b1cc6ecda62f4773d8f​​91b9a128

当我将其粘贴到浏览器中时,它应该会给我一张图片,但是我收到“指定的存储桶不存在”错误

如果我点击这个网址,但它可以工作:https ://some-test-bucket.s3.us-west-1.amazonaws.com/0020f388-b013-425d-812f-e972ee86d08e%3A%3A67%3A%3A0

有人可以帮我理解为什么预签名的网址不起作用吗?

获取预签名网址的代码:

public String getURLForImage(String key){
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.DAY_OF_YEAR, 5);
        GeneratePresignedUrlRequest presignedUrlRequest = new GeneratePresignedUrlRequest(S3_BUCKET_NAME, key).withMethod(HttpMethod.GET).withExpiration(c.getTime());
        return s3.generatePresignedUrl(presignedUrlRequest).toString();
    }

下面是生成 S3 Bean 的代码。似乎不尊重 .withPathStyleAccessEnabled 选项

    @Bean
    @RequestScope
    public AmazonS3 produceS3(){
        System.out.println("CREATING S3 CLIENT: ");
        return AmazonS3ClientBuilder
                .standard()
                .withRegion(Regions.US_WEST_1)
                .withPathStyleAccessEnabled(false)
                .build();
    }

标签: javaamazon-web-servicesamazon-s3

解决方案


推荐阅读