gpt4 book ai didi

node.js - 使用预签名 URL 通过 cURL 将文件加载到 S3

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:32 26 4
gpt4 key购买 nike

我获得了一个预签名 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 问题出在哪里?谢谢

最佳答案

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

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

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

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

最后,请确保以下事项:

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

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

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

关于node.js - 使用预签名 URL 通过 cURL 将文件加载到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51414212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com