Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 通过邮递员调用S3预签名URL_Amazon Web Services_Amazon S3_Postman_Pre Signed Url - Fatal编程技术网

Amazon web services 通过邮递员调用S3预签名URL

Amazon web services 通过邮递员调用S3预签名URL,amazon-web-services,amazon-s3,postman,pre-signed-url,Amazon Web Services,Amazon S3,Postman,Pre Signed Url,我正试图使用预签名的URL进行上传,如文档中所述(),我可以检索预签名的URL,但当我尝试进行投递时,我收到以下错误: <Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

我正试图使用预签名的URL进行上传,如文档中所述(),我可以检索预签名的URL,但当我尝试进行投递时,我收到以下错误:

<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
显然,我的put调用的结构方式与AWS计算签名的方式不匹配。我找不到很多关于这个put调用需要什么的信息

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

内容配置:表单数据;name=“thefiletosend.txt”;filename=“thefiletosend.txt

此外,我注意到postman包含了它所谓的“临时标题”,如下所示:

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

    }
主持人:s3.amazonaws.com 内容类型:文本/纯文本 用户代理:PostmanRuntime/7.13.0 接受:/ 缓存控制:没有缓存 邮递员代币:e11d1ef0-8156-4ca7-9317-9F4D22DAF6C52135BC0E-1285-4438-bb8e-b21d31dc36db 主持人:s3.amazonaws.com 接受编码:gzip,deflate 内容长度:14 连接:保持活力 缓存控制:没有缓存

内容类型标题可能是问题之一,但我不确定如何在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);

    }

我能够通过POST请求在Postman中实现这一点。以下是对我有效的细节。当我调用lambda获取预先签名的URL时,这里是返回的json(在我屏蔽敏感和特定于应用程序的信息后):

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

如果单击word文件右侧的下拉列表,则可以浏览到文件并将其附着:

如果有帮助,我将使用python编写的lambda生成一个预签名URL,以便用户可以上载附件。代码如下所示:

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]
        ]
    )

希望这有帮助。

您的预签名url应该类似于
https://bucket-name.s3.region.amazonaws.com/folder/filename.jpg?AWSAccessKeyId=XXX&Content-Type=image%2Fjpeg&Expires=XXX&Signature=XXX

您可以通过以下方式与邮递员一起上传到S3

  • 将上面的url设置为端点
  • 选择
    PUT
    request
  • 正文
    ->
    二进制
    ->
    选择文件

  • 您的预签名url应该是

    您可以通过以下方式与邮递员一起上传到S3

    将上面的url设置为端点 选择PUT请求,
    Body->binary->Select file

    相关:使用基于表单的上载的问题在于,它会修改正在上载的文件并附加这些附加值。-------------------------------------32452463456766内容处置:表单数据;name=“file”;filename=“employee.csv”内容类型:text/csv