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

用邮递员呼叫S3预签名的URL

商经业
2023-03-14
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

我尝试将Content-Type的头修改为multipart/form-data和application/octet-stream。我还尝试取消postman中的headers部分,并在选择文件时依赖于表单数据和二进制设置的正文类型。“表单-数据”设置会将以下内容添加到调用中:

内容-处置:表单-数据;name=“TheFileTosend.txt”;filename=“TheFileTosend.txt

此外,我注意到,postman正在包括它所称的“临时头”,如下所示:

我正在lambda中生成预签名的URL,如下所示:

    public string FunctionHandler(Input input, ILambdaContext context)
    { 
        _logger = context.Logger;
        _key = input.key;
        _bucketname = input.bucketname;

        string signedURL = _s3Client.GetPreSignedURL(new GetPreSignedUrlRequest()
        {
            Verb = HttpVerb.PUT ,
            Protocol = Protocol.HTTPS,
            BucketName = _bucketname,
            Key = _key,
            Expires = DateTime.Now.AddMinutes(5)
        });

        returnObj returnVal = new returnObj() { url = signedURL };

        return JsonConvert.SerializeObject(returnVal);

    }

共有1个答案

彭胡媚
2023-03-14

我可以使用POST请求在Postman中工作。以下是对我起作用的细节。当我调用lambda获取预签名URL时,这里是返回的json(在我屏蔽了敏感的和特定于应用程序的信息之后):

{
    "attachmentName": "MySecondAttachment.docx",
    "url": "https://my-s3-bucket.s3.amazonaws.com/",
    "fields": {
        "acl": "public-read",
        "Content-Type": "multipart/form-data",
        "key": "attachment-upload/R271645/65397746_MySecondAttachment.docx",
        "x-amz-algorithm": "AWS4-HMAC-SHA256",
        "x-amz-credential": "WWWWWWWW/20200318/us-east-1/s3/aws4_request",
        "x-amz-date": "20200318T133309Z",
        "x-amz-security-token": "XXXXXXXX",
        "policy": "YYYYYYYY",
        "x-amz-signature": "ZZZZZZZZ"
    }
}

在Postman中,创建一个POST请求,并使用“Form-Data”输入您返回的所有字段,其字段名与您在上面所示的signedURL中返回的字段名完全相同。但是,不要设置内容类型。然后再添加一个名为“file”的键:

在word文件的右侧,如果单击下拉框,您可以浏览到您的文件并附加它:

signedURL = self.s3.generate_presigned_post(
    Bucket= "my-s3-bucket",
    Key=putkey,
    Fields = {"acl": "public-read", "Content-Type": "multipart/form-data"},
    ExpiresIn = 15,
    Conditions = [
        {"acl": "public-read"},
        ["content-length-range", 1, 5120000]
        ]
    )
 类似资料:
  • 我需要上传一个文件到S3与邮递员测试。我有一个从S3生成的预签名URL。 但是我不知道如何正确地配置postman,以便对生成的预签名URL执行此PUT请求。 邮件头格式错误的postman上的响应是: 预签名请求的参数: 我得到了URL,然后在邮递员中输入它,用PUT请求,但标题不完整?1.如果我在头上添加content-type,服务器2没有响应。在请求的正文中,Im以“二进制”的形式附加文件

  • 这个GETendpoint有一些问题。由于某种原因,调用状态500内部服务器错误,主体为空。 这是GET调用的代码: titulosPagarService。pesquisar()返回一个JpaRepository。findAll()和titulosPagar的完整列表。 sysoutPrint显示它获取了由TitulosPagar对象生成的列表: 但在邮递员我得到了一个空体和500内部服务器错误

  • 标题说明一切。这是我的代码; 我使用节点强大的文件。 成功上传后,url变量返回s3 url,类似以下内容; 下面是我的参数 我错过了什么?

  • 我正试图上传一个媒体文件(图片,任何扩展名jpg/png/jpeg或视频)到aws s3桶,从邮递员我创建了我的预签名url在我的后端如下 这成功地生成了一个url,但我似乎无法使用postman来测试它,这是我如何在postman中调整请求的截图 我所尝试的: 在上面的代码中,我尝试将签名版本v4添加到params中,但它给了我一个错误,说出了意外的关键字。我甚至尝试将其添加到aws配置和s3中

  • 问题内容: 我收到了不兼容的呼叫签名错误,并且不知道该怎么做才能使其正常工作。 反应态 类别声明 getMethod返回类别 return-Method(反应),这是发生错误的地方: 错误消息:TS2349:无法调用其类型缺少呼叫签名的表达式。类型’(((callbackfn:(值:Cat1,索引:数字,数组:Cat1 [])=> U,thisArg ?: any)=> U [] | …’没有兼容

  • 我正试图通过邮递员发送一个邮件请求,但出现以下错误: 我相信我在HTTPS链接上有一些错误。然后我试着转向*“ SSL认证验证 “*已经在中作为指南。但没有帮助!!!