将文件作为公共文件上传到Kotlin Android中的S3

将文件作为公共文件上传到Kotlin Android中的S3,android,amazon-web-services,amazon-s3,kotlin,Android,Amazon Web Services,Amazon S3,Kotlin,我正在使用Kotlin开发一个Android应用程序。我正在尝试将文件上载到AWS S3存储桶。我可以成功地将文件上传到Bucket。但问题是该文件是作为私有文件上传的。相反,我希望它被上传并设置为公共的 这是我的密码 private fun uploadPhotoToS3(path : String){ doAsync { AWSMobileClient.getInstance().initialize(applicationContext).execu

我正在使用Kotlin开发一个Android应用程序。我正在尝试将文件上载到AWS S3存储桶。我可以成功地将文件上传到Bucket。但问题是该文件是作为私有文件上传的。相反,我希望它被上传并设置为公共的

这是我的密码

private fun uploadPhotoToS3(path : String){
        doAsync {
            AWSMobileClient.getInstance().initialize(applicationContext).execute()

            val s3Client = AmazonS3Client(AWSMobileClient.getInstance().credentialsProvider)
            val transferUtility = TransferUtility.builder()
                    .context(applicationContext)
                    .awsConfiguration(AWSMobileClient.getInstance().configuration)
                    .s3Client(s3Client)
                    .build()
            val uploadObserver = transferUtility.upload("public/testing.jpg", File(path))

            uploadObserver.setTransferListener(object : TransferListener{
                override fun onStateChanged(id: Int, state: TransferState?) {
                    if(TransferState.COMPLETED == state){
                        Log.i("UPLOAD_STATE", "COMPLETED")
                    } else {
                        Log.i("UPLOAD_STATE", "CHANGED")
                    }
                }

                override fun onProgressChanged(id: Int, bytesCurrent: Long, bytesTotal: Long) {

                }

                override fun onError(id: Int, ex: Exception?) {
                    Log.i("UPLOAD_ERROR", "Unable to upload file")
                }
            })
        }
    }
如何修改它以将文件设置为公用?

至。

参考:

附加的


我尝试了上述解决方案。但它返回403错误。我没有使用cognito凭据提供程序,而是将AWS基本凭据提供程序与访问密钥和密钥一起使用。

关于“拒绝访问”错误:尝试使用
AWS-sdk-android-s3 2.7.3
而不是最新的
2.7.5
。这个问题在这里被跟踪

但是,我怎么可能在科特林做到呢?甚至找不到它的方法或参数。我的答案链接到Android.val uploadObserver=transferUtility.upload的文档(“public/testing.jpg”,File(path),cannedAccessController.PublicRead)Ref:收到此错误。10-15 23:19:19.599 29558-29833/com.thegoodyard.waiyanhein.thegoodyard E/UploadTask:在多部分上传过程中遇到的错误:4由于访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:2348F3C66BE0BAB3)com.amazonaws.services.S3.model.amazons3异常:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:2348F3C66BE0BAB3),S3扩展请求ID:OuzolfzNeNAHvlDq3SdeU8FoYjy7vqPRDB3eVMcFdFoLQn+TZC3GFGJI5LKLWXAESTpa2OxPOK=–这个答案解决了您的问题吗?您有办法设置访问控制,以及您的新问题(与此问题无关)正在处理权限设置不正确。出现此错误。10-15 23:19:19.599 29558-29833/com.thegoodyard.waiyanhein.thegoodyard E/UploadTask:在多部分上载过程中遇到错误:4由于访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:2348F3C66BE033)com.amazonaws.services.s3.model.amazons3异常:访问被拒绝(服务:Amazon s3;状态代码:403;错误代码:AccessDenied;请求ID:2348F3C66BE0BAB3),s3扩展请求ID:OuzolfzNeNAHvlDq3SdeU8FoYjy7vqPRDB3eVMcFdFoLQn+tZC3GfGjI5lKlwxaestkPA2oXpOk=
val uploadObserver = transferUtility.upload("public/testing.jpg", File(path), CannedAccessControlList.PublicRead)