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 Can';t通过邮递员使用预先签名的URL将文件上载到S3。错误:SignatureDesNotMatch_Amazon Web Services_Amazon S3_Postman_Pre Signed Url - Fatal编程技术网

Amazon web services Can';t通过邮递员使用预先签名的URL将文件上载到S3。错误:SignatureDesNotMatch

Amazon web services Can';t通过邮递员使用预先签名的URL将文件上载到S3。错误:SignatureDesNotMatch,amazon-web-services,amazon-s3,postman,pre-signed-url,Amazon Web Services,Amazon S3,Postman,Pre Signed Url,如何将带有签名URL的文件上载到S3 我尝试了以下方法: const AWS = require('aws-sdk'); const s3 = new AWS.S3({ accessKeyId: "", secretAccessKey: "" }); const url = s3.getSignedUrl("putObject", { Bucket: "SomeBucketHere", Key: "SomeNameHere", ContentType: "b

如何将带有签名URL的文件上载到S3

我尝试了以下方法:

  const AWS = require('aws-sdk');
  const s3 = new AWS.S3({ accessKeyId: "", secretAccessKey: "" });

  const url = s3.getSignedUrl("putObject", {
    Bucket: "SomeBucketHere",
    Key: "SomeNameHere",
    ContentType: "binary/octet-stream",
    Expires: 600
  });
但是,当我尝试使用以下步骤与Postman一起上传时,我得到了
SignatureDesNotMatch
错误

  • 使用上述代码中的URL放置方法
  • 正文:
    binary
    (单选按钮),选择文件,选择要上载的文件
  • 点击发送
  • 我可以确认IAM权限不是这里的问题。我完全可以接近水桶


    有什么问题吗?如何测试我的签名URL?

    这个问题曾经让我感到非常痛苦

    我所要做的就是在邮递员请求中添加一个标题

    标题:
    内容类型=二进制/八位字节流

    一旦我改变了这一点,文件上传成功


    希望这能为以后的人省去很多麻烦。

    不确定这是否有任何帮助,但我相信你需要通过签名版本

    在python中,您有如下内容:

    import boto3 as boto3
    from botocore.client import Config
    
    ...
    
    s3_client = boto3.client('s3', config=Config(signature_version='s3v4'))
    url = s3_client.generate_presigned_url(
                ClientMethod='put_object',
                Params={
                    'Bucket': bucket,
                    'Key': key,
                },
                ExpiresIn=60
            )
    print url
    
    因此,Javascript中的等价物是:

    var AWS = require('aws-sdk');
    var s3 = new AWS.S3({
      signatureVersion: 'v4',
    });
    
    
    exports.handler = (event, context, callback) => {
      const url = s3.getSignedUrl('putObject', {
        Bucket: '**\[YOUR-S3-BUCKET\]**',
        Key: 'mykey',
        Expires: 10,
      });
    
    
      callback(null, url);
    };
    
    资料来源: