【问题标题】:Ppload file to S3 via cURL using presigned URL使用预签名 URL 通过 cURL 将文件 ppload 到 S3
【发布时间】:2018-12-27 02:14:49
【问题描述】:

我正在获取一个预签名 URL,用于在 S3 存储桶上上传文件。

这是 curl 命令:

curl -v -T ./dansero.jpg 'https://ss-files-dev.s3.ap-southeast-2.amazonaws.com/dansero.jpg\?AWSAccessKeyId\=AKIAIT6VM43PPNS43Y7Q\&Expires\=1531973770\&Signature\=hNvG5rnICkk58mMBLeMgHGDZ93c%3D'

这给了我错误:

<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
</Error>

这里是我的 node.js 生成的预签名 URL

var AWS = require('aws-sdk');

const s3 = new AWS.S3({

  accessKeyId: 'aaa',
  secretAccessKey: 'bbb+oeyjn8zGANuDyCIY',
  region: 'ap-southeast-2'
});

const params = {
  Bucket: 'ss-files-dev',
  Key: 'dansero.jpg'  
};

});

s3.getSignedUrl('putObject', params, function(err, urlsign) {
  if (err) console.log(err);
  console.log(urlsign);
});

那么,我在 URL 生成或 curl 中的问题在哪里? 谢谢

【问题讨论】:

  • 从您的 URL 中删除所有反斜杠 \。您使用 ' 单引号字符串提供 curl 的 URL,因此这些不是必需的,实际上没有意义。

标签: node.js amazon-web-services curl amazon-s3


【解决方案1】:

我看不到签名请求部分。确保获取 put 对象的签名 URL。 这是我脚本中的工作代码:

 s3.getSignedUrl('putObject', params, function(err, urlsign) {
            if (err) console.log(err);
            var output = {
                url: urlsign
            };
            cb(null, output);
        });

尝试通过简单的 put 请求将对象放入您的存储桶,如下所示:

                        var req = http.request({
                            hostname: 's3.amazonaws.com',
                            port: 80,
                            path:{YOURPRESIGNEDURL}.replace('https://s3.amazonaws.com', ''),
                            method: 'PUT',
                        }, function(res) {

最后,请确认以下几点:

1-用户策略和正确的 IAM 用于您的密钥。您应该有权放置这样的对象:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt14546345345",
            "Effect": "Allow",
            "Action": [
                "s3:Put*"
            ],
            "Resource": [
                "arn:aws:s3:::myBucket/*"
            ]
        }
    ]
}

2- 我认为您应该在 curl 请求中传递 -X PUT。

【讨论】:

  • 嗨@reza,感谢您的回复,我更新了我的代码,我有签名请求,现在正在回答,同样的问题,谢谢
猜你喜欢
  • 2021-10-03
  • 2012-04-23
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2020-10-01
  • 2020-01-15
相关资源
最近更新 更多