繁体   English   中英

使用 Amazon S3 上传具有特定文件夹结构的文件

[英]Uploading a file with Amazon S3 with a specific folder structure

我正在使用Amazon 的 cloud thingee 和 S3 来上传文件。

我需要它来存储和区分不同用户的不同日志。 到目前为止,我只能将文件上传到根目录,所以我不能真正即时创建文件夹,这是我需要的。

我使用此代码上传此类文件,没有目录结构:

   AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY));

   File file = FileUtil.writeTextFile(fileName, "test content");

   PutObjectRequest por = new PutObjectRequest(BUCKET_ID, fileName, file);
   s3Client.putObject(por);


   ResponseHeaderOverrides override = new ResponseHeaderOverrides();
   override.setContentType("text");

但是我需要针对不同用户等的动态文件结构,那么我如何包含一个文件结构,例如 [user_id]/[timestamp]/actual_file.ext?

我试过简单地将路径添加到 BUCKET_ID 当然这不起作用。

有什么建议吗?

您可以通过向S3 object key添加前缀来模仿文件夹。

您的存储桶名称不变,但您可以按前缀过滤存储桶的对象 ( https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html#API_ListObjectsV2_RequestSyntax )。

因此,您可以在存储桶 MyBucket 中拥有不同的对象:

  • user1/ts1/firstobject
  • user1/ts2/secondobject
  • 用户N/tsN/对象

您可以在此处找到有关 S3 前缀管理的 AWS 文档: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html

更新

在您的情况下,文件名不应该是 actual_file.ext 而是 [user_id]/[timestamp]/actual_file.ext 因为它是 S3 Object 密钥。

PutObjectRequest por = new PutObjectRequest(BUCKET_ID, [user_id]/[timestamp]/[fileName], file);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM