我正试图使用AWS javascript sdk生成一个PresignedPost URL,
我收到以下错误-
Error: Unable to create a POST object policy without a bucket, region, and credentials
我在本地配置了具有S3访问权限的AWS凭据,
在创建S3客户端时设置区域的代码中,
将bucket名称作为参数传递给客户端方法时。
以下是代码片段-
const AWS = require('aws-sdk');
let util = require('util');
let s3Client = new AWS.S3({
region: 'us-east-1'
});
let postSignedUrl = async () => {
try {
let postSigningParams = {
Expires: 60,
Bucket: "some-bucket-name,
Conditions: [["content-length-range", 100, 10000000]],
Fields: {
key: 'test/image.jpg'
}
}
let s3createPresignedPost = util.promisify(s3Client.createPresignedPost).bind(s3Client);
let postSignedUrl = await s3createPresignedPost('putObject',postSigningParams);
console.log('postSigningParams => ', postSignedUrl);
} catch (error) {
console.error(error);
}
}
postSignedUrl();
错误堆栈跟踪-
Error: Unable to create a POST object policy without a bucket, region, and credentials
at features.constructor.preparePostFields (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/servi
ces/s3.js:943:13)
at finalizePost (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/services/s3.js:906:22)
at /Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/services/s3.js:923:24
at finish (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/config.js:349:7)
at /Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/config.js:367:9
at SharedIniFileCredentials.get (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/credentials.js:
127:7)
at getAsyncCredentials (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/config.js:361:24)
at Config.getCredentials (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/config.js:381:9)
at features.constructor.createPresignedPost (/Users/aniruddhanarendraraje/Documents/work/pocs/node-crud-app/snippets/node_modules/aws-sdk/lib/ser
vices/s3.js:918:14)
at Promise (internal/util.js:274:30)
我尝试了以下操作,但没有成功-
AWS.config.update({region:'us-east-1'});
let s3Client = new AWS.S3();
类似的AWS S3 sdk方法有效-
let presignedUrl = async () => {
let signingParams = {
Bucket: 'some-bucket-name',
Key: 'test/image.jpg',
Expires: 60
}
let s3GetSignedUrl = util.promisify(s3Client.getSignedUrl).bind(s3Client);
let signedUrl = await s3GetSignedUrl('putObject',signingParams);
console.log('signedUrl => ', signedUrl);
}
犯了一个愚蠢的错误,
错误地将putObject
作为参数传入createPresignedPost
方法调用
let postSignedUrl = await s3createPresignedPost('putObject',postSigningParams);
应该只是-
let postSignedUrl = await s3createPresignedPost(postSigningParams);