我正在开发一个新项目,该项目需要以图像形式上传附件。我正在使用DynamoDB和AppSync API从数据库插入和检索数据。由于我们是AppSync以及我们用于该应用程序的所有亚马逊服务和数据库的新手,我对身份验证过程有些困惑。现在,我们正在使用API密钥进行身份验证,我已经尝试了这些步骤将图片上传到s3。
1使用诸如:-
之类的静态配置来配置AWSServiceManager
let staticCredit = AWSStaticCredentialsProvider(accessKey: kAppSyncAccessKey, secretKey: kAppSyncSecretKey)
let AppSyncRegion: AWSRegionType = .USEast2
let config = AWSServiceConfiguration(region: AppSyncRegion, credentialsProvider: staticCredit)
AWSServiceManager.default().defaultServiceConfiguration = config
2使用此方法上传图片:-
func updatePictureToServer(url:URL, completion:@escaping (Bool)->Void){
let transferManager = AWSS3TransferManager.default()
let uploadingFileURL = url
let uploadRequest = AWSS3TransferManagerUploadRequest()
let userBucket = String(format: "BUCKET")
uploadRequest?.bucket = userBucket
let fileName = String(format: "%@%@", AppSettings.getUserId(),".jpg")
uploadRequest?.key = fileName
uploadRequest?.body = uploadingFileURL
transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in
if let error = task.error as NSError? {
if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) {
switch code {
case .cancelled, .paused:
break
default:
print("Error uploading: \(String(describing: uploadRequest!.key)) Error: \(error)")
}
} else {
print("Error uploading: \(String(describing: uploadRequest!.key)) Error: \(error)")
}
completion(false)
return nil
}
_ = task.result
completion(true)
print("Upload complete for: \(String(describing: uploadRequest!.key))")
return nil
})
}
3最后,我能够在S3存储桶上看到上传的图像
但是我担心如何保存图像的网址以及如何检索图像,因为当我不得不让buket PUBLIC检索图像时,我认为这不是一个好方法,而且是吗?拥有Cognito用户池是必要的,因为我们尚未在应用程序中使用Cognito用户池,并且对此也没有太多了解,并且文档在实际情况下也无济于事,因为我们是第一次实施ti,因此我们需要一些帮助。
有两个问题:-
谢谢
注意:任何与AppSync,S3或DynamoDB有关的建议或改进或任何相关内容都将受到真正的赞赏,并且语言并不是寻找快速而客观的方向的障碍。
答案 0 :(得分:1)
您需要使用Cognito联合身份对存储桶进行基于身份的安全性,该身份可为每个用户提供自己的安全存储桶。您可以利用AWS Amplify通过$amplify add auth
为您的项目进行设置,然后选择默认配置,然后选择$amplify add storage
,以适当的权限配置该存储桶和池以使用私有上传。
有关更多信息,请查看仓库:https://github.com/aws-amplify/amplify-cli