XCode Swift AWS S3上传不工作

XCode Swift AWS S3上传不工作,swift,xcode,amazon-web-services,amazon-s3,upload,Swift,Xcode,Amazon Web Services,Amazon S3,Upload,由于某种原因,上传到S3无法工作,而我能够让下载功能正常工作 这是我的上传代码: @iAction func上载文件(\发送方:UIButton){ 让CognitorRegionType=AWSRegionType.USWest2//例如AWSRegionType.USEast1 让CognitoIdentityPoolId=“us-west-2:3c00122a-866c-4ce4-9dd3-ee23c16e58f3” 让DefaultServiceRegionType=AWSRegionT

由于某种原因,上传到S3无法工作,而我能够让下载功能正常工作

这是我的上传代码:

@iAction func上载文件(\发送方:UIButton){

让CognitorRegionType=AWSRegionType.USWest2//例如AWSRegionType.USEast1
让CognitoIdentityPoolId=“us-west-2:3c00122a-866c-4ce4-9dd3-ee23c16e58f3”
让DefaultServiceRegionType=AWSRegionType.USWest1//例如AWSRegionType.USEast1
让S3BucketName=“snappcastphotos”
让credentialsProvider=AWSCognitoCredentialsProvider(regionType:CognitoRegionType,identityPoolId:CognitoIdentityPoolId)
let configuration=AWSServiceConfiguration(区域:DefaultServiceRegionType,credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration=配置
让uploadRequest=AWSS3TransferManagerPloadRequest()
uploadRequest?.bucket=S3BucketName
uploadRequest?.key=“宾果”
uploadRequest?.body=URL(fileURLWithPath:“/users/rhom/desktop/test.rtf”)
让transferManager=AWSS3TransferManager.default()
transferManager.upload(uploadRequest!).continueWith(执行器:AWSExecutor.mainThread(),块:{(任务:AWSTask)->中的任何
如果let error=task.error as?NSError{
如果error.domain==AWSS3TransferManagerRorDomain,则让code=AWSS3TransferManagerRorType(rawValue:error.code){
开关码{
案例。已取消,。暂停:
打破
违约:
打印(“上传错误:\(上传请求?.key)错误:\(错误)”)
}
}否则{
打印(“上传错误:\(上传请求?.key)错误:\(错误)”)
}
归零
}
让uploadOutput=task.result
打印(“上传完成:\(上传请求?.key)”)
归零
})
}
此代码产生以下错误/输出:

上传错误:可选(“宾果”)错误:Error Domain=com.amazonaws.AWSS3ErrorDomain Code=0“(null)”UserInfo={HostId=KAsbvIqiY67dr/64f3uvzpb1llr5vj7ennv198dlai/RG/tA+v3to8cbbnbfsm00v2cozzebx/M=,Message=请求正文意外终止,Code=incomplebody,RequestId=A95236E53A1B8FE8}


有人有什么想法吗?我找不到任何线索来解释为什么下载可以使用Cognito和S3,但是上传不起作用

看起来更像是授权错误。检查您是否拥有此特定存储桶的写入权限,并检查您提供的路径是否正确,就好像存在不匹配的情况一样,它不会工作

我终于解决了这个问题:)

事实证明,我已经安装了一个AWS框架的旧版本,因为我正在按照一个旧的教程开始。。。并且在IOS 8.0的pod文件中使用Cocoapods加载了框架,但我现在是IOS 10.0!!!!因此,将podfile更改为10.0版解决了这个问题

最后我用Cocoapods和10.0版本的正确pod文件重新安装了AWS框架。。。但我认为有一种方法可以直接更新pod,但我会在以后研究


希望这也能帮助有这个问题的人:)

是的,我检查了Cognito和S3 bucket中的权限,以确保它们具有读/写权限。。。将继续搜索,但请thx发表评论
    let CognitoRegionType = AWSRegionType.USWest2  // e.g. AWSRegionType.USEast1
    let CognitoIdentityPoolId = "us-west-2:3c00122a-866c-4ce4-9dd3-ee23c16e58f3"

    let DefaultServiceRegionType = AWSRegionType.USWest1 // e.g. AWSRegionType.USEast1
    let S3BucketName = "snappcastphotos"


    let credentialsProvider = AWSCognitoCredentialsProvider(regionType:CognitoRegionType, identityPoolId: CognitoIdentityPoolId)
    let configuration = AWSServiceConfiguration(region: DefaultServiceRegionType , credentialsProvider:credentialsProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration


    let uploadRequest = AWSS3TransferManagerUploadRequest()
    uploadRequest?.bucket = S3BucketName
    uploadRequest?.key = "bingo"
    uploadRequest?.body = URL(fileURLWithPath: "/users/rhom/desktop/test.rtf")

    let transferManager = AWSS3TransferManager.default()
    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: \(uploadRequest?.key) Error: \(error)")
                }
            } else {
                print("Error uploading: \(uploadRequest?.key) Error: \(error)")
            }
            return nil
        }

        let uploadOutput = task.result
        print("Upload complete for: \(uploadRequest?.key)")
        return nil
    })
}