gpt4 book ai didi

amazon-web-services - JavaScript 使用预签名的 Url 保存到 S3

转载 作者:行者123 更新时间:2023-12-04 08:06:44 30 4
gpt4 key购买 nike

我正在使用 aws-sdk 获取 S3 的预签名 url。我将函数包装在 lambda 中。

const aws = require('aws-sdk');

module.exports = CreateRecord => {
CreateRecord.controllers.createSignature = (event, context, callback) => {
const s3 = new aws.S3({
signatureVersion: 'v4',
});

const params = {
Bucket: 'random-test-bucket002',
Key: 'test-key',
Expires: 100
};

s3.getSignedUrl('putObject', params, function(err, signedUrl) {
let response;
if (err) {
response = {
statusCode: 500,
headers: {
'Access-Control-Allow-Origin': '*',
},
body: JSON.stringify({
error: 'Did not receive signed url'
}),
};
} else {
response = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*', // Required for CORS support to work
},
body: JSON.stringify({
message: `Url successfully created`,
signedUrl,
})
};
}
callback(null, response);
});
};
};

此代码运行良好,我取回了我的预签名网址。当我在前端运行这段代码时:

postImage(uuid) {
const getSignature = 'https://xyz.execute-api.us-east-1.amazonaws.com/dev/v1/createSignature';
axios.get(getSignature)
.then(res => {
const signatureUrl = res.data.signedUrl;
// I have a blob that I store in file
// uuid is passed from another function
const file = new File([this.state.cover], uuid);

axios.post(signatureUrl, file)
.then(s3Res => {
console.log(s3Res);
});
});
}

我不断收到的错误是:我们计算的请求签名与您提供的签名不匹配。检查您的 key 和签名方法。我试着弄乱了一些内容类型 header ,但没有任何效果。我可以将预签名的 url 传递给 aws-sdk 中的函数吗?我已经查看了很多关于此的帖子,但似乎无法解决问题。

最佳答案

当使用预签名的 PutObject URL 上传到 S3 时,您应该使用 HTTP PUT 方法而不是 HTTP POST 方法上传文件。您可以将对象发布到 S3,但这是为基于浏览器的上传而设计的。

关于amazon-web-services - JavaScript 使用预签名的 Url 保存到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938799/

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