【发布时间】:2019-02-03 10:57:53
【问题描述】:
我正在尝试通过 AWS Amplify 将文件上传到现有的 s3 存储桶。
我没有使用 AWS MobileHub。
我根据this guide 创建了新的身份池,最后这是我对这个角色的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:*",
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": "*"
}
]
}
在我的代码中,我将 Amplify 配置如下:
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 会创建一些存储桶,而我的用例涉及使用我现有的存储桶。
【问题讨论】:
-
你确定这个错误是关于 S3 的吗?堆栈跟踪中没有任何显示。您可以将代码提取添加到问题中吗?另外:“演示”桶是你的吗?存储桶名称是全球唯一的,如果您有一个名为 "demo" 的存储桶,我会感到惊讶。命令“aws s3 ls --region us-east-1”将列出您的存储桶。我敢打赌,您正在尝试访问不属于您的存储桶。
-
我更新了问题。如果我添加移动集线器并从中导出配置,它可以工作,但它会创建一些额外的存储桶,我需要将放大添加到现有项目。没有“演示”只是虚拟的,例如它有不同的名称。我应该在哪里输入该命令?
标签: amazon-web-services react-native amazon-s3 aws-amplify