我想通过AWS放大到上传文件到现有的S3桶。
的我不使用使用AWS MobileHub 即可。
我按照创建新的身份池this guide,最后,这是我对这个角色的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:*",
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": "*"
}
]
}
在我的代码,我配置中扩增如下:
Amplify.configure({
'aws_cognito_identity_pool_id': 'us-east-2:f37baa...',
'aws_cognito_region': 'us-east-2',
'aws_user_files_s3_bucket': 'demo',
'aws_user_files_s3_bucket_region': 'us-east-1',
});
我得到了错误:
Error: Access Denied
at Request.extractError (s3.js:580)
at Request.callListeners (aws-sdk-core-react-native.js:3610)
at Request.emit (aws-sdk-core-react-native.js:3582)
at Request.emit (aws-sdk-core-react-native.js:7723)
at Request.transition (aws-sdk-core-react-native.js:7062)
at AcceptorStateMachine.runTo (aws-sdk-core-react-native.js:7867)
at aws-sdk-core-react-native.js:7879
at Request.<anonymous> (aws-sdk-core-react-native.js:7078)
at Request.<anonymous> (aws-sdk-core-react-native.js:7725)
at Request.callListeners (aws-sdk-core-react-native.js:3620)
更新
import Amplify from 'aws-amplify';
import { Storage } from 'aws-amplify';
Amplify.configure({
'aws_cognito_identity_pool_id': 'us-east-2:f37...',
'aws_cognito_region': 'us-east-2',
'aws_user_files_s3_bucket': 'demo',
'aws_user_files_s3_bucket_region': 'us-east-1',
});
export default class App extends Component<Props> {
...
uploadImage = async uri => {
const fileName = 'example.jpg';
await Storage.put(fileName, blob, {
contentType: 'image/jpeg',
level: 'public'
}).then(data => console.log(data))
.catch(err => console.log(err))
这是整个代码,我只是没有添加要获取的文件,但是可以肯定地工作。
当我使用移动中心aws-exports.js
,我可以上传文件,但MobileHub产生了一些bucketsm和我的用例包括使用我现有的桶。
答案 0 :(得分:0)
因此,据我所知,您的代码正在尝试访问现有的S3存储桶,而不是Amplify / Mobile Hub创建的存储桶?
如果我是对的,则需要更新Cognito策略,以向用户授予对现有S3存储桶的访问权限。
在IAM -> Roles
控制台中,您将找到Amplify创建的两个角色。角色名称为YOUR_PROJECT____DATE_TAG___[un]authrole
,例如在我的控制台中:photoalbums-20190202155011-unauthRole
和photoalbums-20190202155011-authRole
根据要授予已认证用户或未认证用户的访问权限,修改适当的角色,或者如果希望已认证和未认证用户都有权访问S3,则修改两个角色。
添加S3托管策略AmazonS3ReadOnlyAccess
将为您的用户授予对存储桶的只读访问权限。 (请不要添加AmazonS3FullAccess
或s3:*
,因为它将使您的用户创建和删除帐户中的存储桶和对象)