亚马逊 s3 文件上传时公开

塞尔吉奥·古尔吉克

我需要调用 withCannedAcl 方法。它将图像转换为公共阅读 ENUM,因此当书籍图像注册到存储桶中时,它们将具有可读的公共可见性,并且所有用户都可以查看图像。如何将方法插入到我的文件保护文件中?

这里是我找到的 withCannedAcl 方法:

.withCannedAcl(CannedAccessControlList.PublicRead));

这是我必须在其中插入该方法的 filesaver.java(可能在 s3.putObject():? 内)。我试过了,但没有用。

@RequestScoped
public class FileSaver {

private static final String CONTENT_DISPOSITION = "content-disposition";

private static final String FILENAME_KEY = "filename=";

@Inject
private AmazonS3Client s3;    

public String write(String baseFolder, Part multipartFile) {
    AmazonS3Client s3 = client();
    String fileName = extractFilename(multipartFile.getHeader(CONTENT_DISPOSITION));
    try {
        s3.putObject("superkovalev", fileName,
                multipartFile.getInputStream(),                    
                new ObjectMetadata());            
                return "https://s3.amazonaws.com/xxxxxxxxxxxxxx/"                            
                +fileName;
    } catch (AmazonClientException | IOException e) {
        throw new RuntimeException(e);
    }
}

 private AmazonS3Client client() {
    AWSCredentials credentials = new BasicAWSCredentials("xxxxxxxx ",
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    AmazonS3Client newClient = new AmazonS3Client(credentials, new 
     ClientConfiguration());
    newClient.setS3ClientOptions(new 
     S3ClientOptions().withPathStyleAccess(true));
    return newClient;
   }

  private String extractFilename(String contentDisposition) {

    if (contentDisposition == null) {
        return null;
    }
    int startIndex = contentDisposition.indexOf(FILENAME_KEY);
    if (startIndex == -1) {
        return null;
    }
    String filename = contentDisposition.substring(startIndex
            + FILENAME_KEY.length());
    if (filename.startsWith("\"")) {
        int endIndex = filename.indexOf("\"", 1);
        if (endIndex != -1) {
            return filename.substring(1, endIndex);
        }
    } else {
        int endIndex = filename.indexOf(";");
        if (endIndex != -1) {
            return filename.substring(0, endIndex);
        }
    }
    return filename;
}

public AmazonS3Client getS3() {
    return s3;
}

public void setS3(AmazonS3Client s3) {
    this.s3 = s3;
}

 }
塞尔吉奥·古尔吉克

这是问题的答案:

Policy bucket_policy = new Policy().withStatements(
new Statement(Statement.Effect.Allow)
    .withPrincipals(Principal.AllUsers)
    .withActions(S3Actions.GetObject)
    .withResources(new Resource(
        "arn:aws:s3:::" + bucket_name + "/*")));

https://docs.aws.amazon.com/pt_br/sdk-for-java/v1/developer-guide/examples-s3-bucket-policies.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

亚马逊s3上传签名网址公开阅读

来自分类Dev

使用flask将文件上传到亚马逊s3

来自分类Dev

使用flask将文件上传到亚马逊s3

来自分类Dev

流星亚马逊S3图片上传缩略图

来自分类Dev

AWS 同步文件与亚马逊 s3 存储桶

来自分类Dev

亚马逊s3,将文件上传到存储桶中的文件夹中

来自分类Dev

亚马逊s3存储桶的Angular2文件上传

来自分类Dev

图片上传到亚马逊S3,需要是二进制文件吗?

来自分类Dev

图片上传到亚马逊s3,需要为二进制文件吗?

来自分类Dev

亚马逊s3通过url直接从asp.net上传文件

来自分类Dev

如何将缩略图文件上传到亚马逊S3存储桶?

来自分类Dev

使用java filechooser在亚马逊s3存储桶中上传多个文件

来自分类Dev

亚马逊 S3 存储

来自分类Dev

使用javascript sdk的亚马逊s3上传不起作用

来自分类Dev

亚马逊S3文件上的大数据zip

来自分类Dev

如何读取亚马逊S3中文件的元数据

来自分类Dev

亚马逊S3的Heroku错误

来自分类Dev

亚马逊S3中的ACL权限

来自分类Dev

亚马逊S3存储桶名称

来自分类Dev

c#.netcore获取亚马逊s3文件夹下所有文件的ImageURL

来自分类Dev

公开通过SMTP上传到S3的文件

来自分类Dev

(使用aws-sdk)如何查找存储在亚马逊s3中的文件夹的总大小

来自分类Dev

亚马逊重试上传大文件

来自分类Dev

CNAME转s3桶式亚马逊

来自分类Dev

创建亚马逊AWS S3预签名URL PHP

来自分类Dev

保存裁剪后的图像-到亚马逊S3

来自分类Dev

亚马逊s3名称键名误解

来自分类Dev

亚马逊S3和Amazon Redshift之间的区别

来自分类Dev

亚马逊s3图像在Android上下载