当前位置: 首页 > 知识库问答 >
问题:

AWS-Amazon S3文档示例无法工作SignatureDoesNotMatch

上官凯泽
2023-03-14

我正试图生成一个预先签名的URL,其中包含文档中可用的确切代码:

https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/examples-s3-presign.html

PutObjectRequest objectRequest = PutObjectRequest.builder()
                .bucket(bucketName)
                .key(keyName)
                .contentType("text/plain")
                .build();

        PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
                .signatureDuration(Duration.ofMinutes(10))
                .putObjectRequest(objectRequest)
                .build();

        PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest);


        String myURL = presignedRequest.url().toString();
        System.out.println("Presigned URL to upload a file to: " +myURL);
        System.out.println("Which HTTP method needs to be used when uploading a file: " +
                presignedRequest.httpRequest().method());

        // Upload content to the Amazon S3 bucket by using this URL
        URL url = presignedRequest.url();

        // Create the connection and use it to upload the new object by using the presigned URL
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type","text/plain");
        connection.setRequestMethod("PUT");
        OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
        out.write("This text was uploaded as an object by using a presigned URL.");
        out.close();

        connection.getResponseCode();
        System.out.println("HTTP response code is " + connection.getResponseCode());

    } catch (S3Exception e) {
        e.getStackTrace();
    } catch (IOException e) {
        e.getStackTrace();
    }

但我有一个错误:

SignatureDoesNotMatch我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。

知道文档代码为什么不起作用吗?这似乎与AWS签名V4有关。我不知道

共有1个答案

姜飞飙
2023-03-14

我刚刚针对JavaV2代码示例测试了这个AWS SDK,它运行良好,并生成了一个预签名URL——如下所示,这是逐行调试代码的屏幕截图:

完整示例如下:

https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/s3/src/main/java/com/example/s3/GeneratePresignedUrlAndUploadObject.java

您是否在这个Github位置使用了POM文件中显示的依赖项?

其他可能的问题可能是您将S3客户端对象设置到了错误的区域,或者出现了此处讨论的密钥名称问题——Amazon S3——如何修复“我们计算的请求签名与签名不匹配”错误?。

 类似资料:
  • 组件功能介绍和使用场景 准备 了解组件,需要额外的知识 知识点1 知识点2 安装 通过 Composer 安装 composer require swoft/xxx 注解 @XxxAnnotation 注解功能描述 arg 注解功能描述 arg2 注解功能描述 用法 以不同的使用场景,概括用法点,所有介绍切入点,都为使用场景。 实体 重要函数介绍格式 // 全局函数格式 xxxx(int $a,

  • 问题内容: 无法完全从文档中理解此示例…我尝试以多种方式运行该示例,以便观察其工作原理,等等。 您如何订阅?我们可以包括完成这项工作所需的客户端代码吗? 是否有一个名为的收藏?是消息集合吗?我们可以在示例中包含集合定义吗? 任何提示都很棒! 注意 :这是最初发布此问题(2012年5月)时显示的代码。现在更简单了。 问题答案: 感谢您提示我写一个更清晰的解释。这是带有我的评论的完整示例。我已经清理了

  • 然而,下载URL与paremeters有一些有趣的地方,它看起来如下所示: (在url中,'&\;‘实际上没有'\',但我把它放在帖子中,以避免将其转义为'&')。 那么这里是什么情况;我是否有3个参数h、e、gd,或者我有一个参数h,其值,或者我有以下3个参数值对:,,(我认为是这样,而且似乎是一个bug)? 为了形成一个正确的http请求,我需要清楚地知道参数、名称和值是什么,但是我有一个令人

  • 在学习了下面的amazon教程并确保我正在使用amazon Linux2之后,我无法使我的phpinfo.php文件正常工作。它只是回声在页面上,并不显示所有的信息,因为它应该。 为了确保我没有错过一步,我把每件事都整理好了,但还是没有运气。 我是不是漏掉了什么? https://docs.aws.amazon.com/awsec2/latest/userguide/ec2-lamp-amazon

  • Serde文档说: 所有这些都可以使用开箱即用的Serde进行序列化。 serde_json只是为了举例,一般不需要。 这正是我所需要的,一个结构到一些基本二进制格式的基本序列化。我不需要JSON格式,我想保持简单,以便能够在文件中存储struct或将其发送到网络。文档并不清楚如何使用serde进行基本(二进制或默认)序列化,它只显示了一个JSON的例子,但这不是我要找的。我也不想实现我自己的<

  • 接受语言en-gb,EN;Q=0.5 接受编码gzip,放气 连接保持活动状态 X-Origin http://xxx.com X-Referer http://xxx.com X-goog-encode-response-如果...基64