【问题标题】:How to make file permission "read public" while uploading file on S3 by TransferManager using java?TransferManager使用java在S3上上传文件时如何使文件权限“公开”?
【发布时间】:2020-04-23 12:09:53
【问题描述】:

我想在 s3 上上传文件时公开我的文件读取权限。 我正在使用 -

TransferManager tm = TransferManagerBuilder.standard().withS3Client(s3Client).build();
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setCacheControl("max-age=2592000, must-revalidate");
            Upload upload = tm.upload(props.getProperty("aws.bucket.name"), keyName,
                    new File(rootPath + SUFFIX + fileName));
            upload.waitForCompletion();

您能帮我如何使用 ACL 吗?

【问题讨论】:

  • 我认为这取决于存储桶策略

标签: java amazon-web-services amazon-s3 file-upload


【解决方案1】:

使用备用upload(PutObjectRequest) 方法。当您使用此上传变体时,您提供了一个 PutObjectRequest,您可以使用存储桶、密钥和文件构建它,然后您可以使用 withCannedAcl(CannedAccessControlList) 附加一个固定 ACL。例如:

PutObjectRequest por = new PutObjectRequest(bucket, key, file)
    .withCannedAcl(CannedAccessControlList.PublicRead);
Upload upload = tm.upload(por);
upload.waitForCompletion();

其他选择包括:

  • 之后使用s3Client.setObjectAcl(bucketName, keyName, acl)设置ACL
  • 切换到使用 Transfer Manager 的 uploadFileList() 方法,该方法支持预设 ACL 提供程序选项。

【讨论】:

  • 你能告诉我我必须在哪里添加该代码吗?还是一头雾水
  • 上传完成后明确设置 ACL。或者将 upload 调用替换为 uploadFileList 变体。
  • 如果您不需要设置元数据,我会假设您可以提供空元数据提供程序,但您必须进行验证。另一种在上传后显式设置 ACL 的方法可能更简单。
  • 你能告诉我如何在uploadFileList() 方法中添加acl 吗?
  • 已确定有更好的解决方案,即使用接受 PutObjectRequest 的 upload() 变体,因为您可以对其应用 ACL。
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2015-06-19
  • 2017-06-13
相关资源
最近更新 更多