Roc*_*uy3 5 javascript amazon-s3 amazon-web-services amazon-cognito aws-sdk
我正在尝试使用AWS的JavaScript SDK从Web浏览器上传文件到我的S3存储桶.我的代码看起来像这样:
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
AccountId: 'dfhgdh',
IdentityPoolId: 'fdagsd',
RoleArn: 'fdafds'
});
var bucket = new AWS.S3({params: {Bucket: 'test-bucket'}});
var pdfUpload = document.getElementById('pdf-uploads').files[0];
var params = {Key: pdfUpload.name, ContentType: pdfUpload.type, Body: pdfUpload};
bucket.putObject(params, function (error, data) {
if (error) {
console.log(error);
} else {
console.log(data);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,每当它到达putObject命令时,我都会从AWS收到错误:
"错误:配置中缺少凭据{message:"配置中缺少凭据",代码:"CredentialsError"......"
我敢肯定我在这里错过了一些简单而愚蠢的东西,但我无法弄清楚我的生活是什么.(当我尝试对伪秘密密钥进行硬编码时,我得到了一个不同的错误,所以我很确定它与我尝试设置认证凭证的方式有关.)
事实证明,在调试JavaScript AWS SDK之后,问题是我在设置凭据之前没有设置区域......出于某种原因,我还需要使用update方法.我认为这似乎是SDK的一个错误,但AWS.config的以下设置修复了我的问题:
AWS.config.region = 'us-east-1';
AWS.config.update({
credentials: new AWS.CognitoIdentityCredentials({
AccountId: '43243243243',
RoleArn: 'arn:aws:iam::970123460807:role/Cognito_RigUpWebUnauth_DefaultRole',
IdentityPoolId: 'us-east-1:432432-432432432-4324323423-423243'
})
});
Run Code Online (Sandbox Code Playgroud)
小智 7
配置凭证对象后,您需要通过调用来调用以获取这些凭据refresh().然后,您可以在回调中将您的呼叫转接到S3.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({...});
AWS.config.credentials.refresh(function(){
// Your S3 code here...
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4020 次 |
| 最近记录: |