【问题标题】:How to upload an Android file to S3 bucket with public permission如何在具有公共权限的情况下将 Android 文件上传到 S3 存储桶
【发布时间】:2016-07-11 13:08:47
【问题描述】:

我一直在尝试将文件上传到 s3 存储桶。但是该文件永远不会公开供查看。我必须手动将存储桶中的文件/文件夹公开(每次上传)才能查看。

有没有办法上传一个Android文件(位图),默认权限是公开的,以供查看。如果可能的话,我更愿意以编程方式执行此操作。我检查了 s3 文档,找不到任何有用的东西。

【问题讨论】:

    标签: android amazon-web-services amazon-s3 awss3transferutility


    【解决方案1】:

    是的,对于那些使用 TransferUtility 的人来说,这很容易, 使用以下方法在 Android 中使用 TransferUtility 为 公共可读 表单上传任何文件,

    transferUtility.upload(String bucketName,String key,File file,CannedAccessControlList cannedAcl)
    

    示例:

    transferUtility.upload("MY_BUCKET_NAME","FileName",your_file,CannedAccessControlList.PublicRead);
    

    【讨论】:

    • 发现错误的第四个参数。需要 ObjectMetaData 作为第四个参数。
    • 您好@HardikJoshi,我在我的项目中使用以下库,-编译'com.amazonaws:aws-android-sdk-core:2.2.+'-编译'com.amazonaws:aws-android -sdk-s3:2.2.+' - 编译 'com.amazonaws:aws-android-sdk-ddb:2.2.+' 并且 TransferUtility 类中有四种方法用于上传文件,如果您使用 ObjectMetadata 也作为参数你可以在第四个参数中传递“new ObjectMetadata()”。
    • 好的。将库更新到最新版本后,它可以工作。谢谢兄弟!
    【解决方案2】:

    要默认公开存储桶中的所有对象,请查看this questionthis question 的答案。

    要在通过 Android 上传文件时为每个文件指定公共访问权限,请在 PutObjectRequest 上设置 ACL,如下所示:

    PutObjectRequest putObjectRequest = new PutObjectRequest()
        .withCannedAcl(CannedAccessControlList.PublicRead)
    

    目前看来您无法使用TransferUtility 一步设置ACL:https://github.com/aws/aws-sdk-android/issues/63

    因此,通过TransferUtility 上传文件后,您需要执行以下操作:

    s3client.setObjectAcl(bucketName, keyName, CannedAccessControlList.PublicRead);
    

    【讨论】:

    • 您能否编辑您的代码并包含一个在通过传输实用程序服务上传时设置 ACL 的示例?
    • 我在使用 putObjectRequest 时也遇到了同样的问题,而不是我的设备冻结。如果有人有解决方案,请帮助我。更多详细信息,请参阅我的问题 here
    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2018-04-24
    • 2018-06-03
    • 2019-07-14
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多