【问题标题】:how to upload files to separate folders in aws3 bucket如何将文件上传到aws3存储桶中的单独文件夹
【发布时间】:2018-12-20 08:53:39
【问题描述】:

我想将公共文件上传到公共文件夹,并将私有文件上传到在 aws3 存储桶中创建的私有文件夹。

我应该对代码进行哪些更改。

@Override
public void uploadFile(String keyName, String uploadFilePath) {
    try {
        File file = new File(uploadFilePath);
        s3client.putObject(new PutObjectRequest(bucketName + "/public", keyName, file));
        logger.info("===================== Upload File - Done! =====================");
        System.out.println("url is*****" + s3client.getUrl(bucketName + "/public", keyName).toString());
        url = s3client.getUrl(bucketName+ "/public", keyName).toString();
        Connection cn = new Connection();
        cn.db();
    } catch (AmazonServiceException ase) {
        logger.info("Caught an AmazonServiceException from PUT requests, rejected reasons:");
        logger.info("Error Message:    " + ase.getMessage());
        logger.info("HTTP Status Code: " + ase.getStatusCode());
        logger.info("AWS Error Code:   " + ase.getErrorCode());
        logger.info("Error Type:       " + ase.getErrorType());
        logger.info("Request ID:       " + ase.getRequestId());
    } catch (AmazonClientException ace) {
        logger.info("Caught an AmazonClientException: ");
        logger.info("Error Message: " + ace.getMessage());
    }
}

【问题讨论】:

  • 您能澄清一下您的问题吗?您在上传文件时遇到问题吗?或者您是否在问如何配置 Amazon S3 以使一个文件夹公开而另一个文件夹 not 公开? “将公共文件上传到公共文件夹”是什么意思 - 什么将其标识为应该放置在“公共文件夹”中的“公共文件”?请编辑您的问题以提供更多详细信息。
  • @John 公共文件在某种意义上..我想在公共文件夹中上传可公开访问的文件

标签: amazon-web-services spring-boot


【解决方案1】:

默认情况下,Amazon S3 存储桶中的所有对象都是私有的。

如果您希望公开某个特定文件夹,您可以使用 Bucket Policy,例如:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicFolder",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/public/*"]
    }
  ]
}

【讨论】:

    【解决方案2】:

    bucket、key的值构造不正确:

    bucketName + "/public", keyName
    

    桶、键值的正确构造:

    bucketName, "public/" + keyName
    

    请注意,对象键不应该包含前导 /,因此如果您的 keyName 现在有一个,那么这是错误的,应该修复...对象键没有前导 / 和提供一个会导致问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 2017-08-11
      • 1970-01-01
      • 2021-09-04
      • 2020-07-25
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多