LoginSignup
6
6

More than 5 years have passed since last update.

AWS S3でフォルダの名称を変更(Java)

Last updated at Posted at 2019-03-14

AWS S3でフォルダの名称を変更したい

そもそもAWS S3にはフォルダという概念はないので、「フォルダ」という呼称は不適なんですが。
(この場合は、「キー」と呼称するほうが適切なのかな?)

とりあえず便宜上「フォルダ」と呼びます。

AWS S3は一度作ったフォルダの名前は変更できない

いきなり出来ねえってなんだよ、と思われるかもですが出来ません。
ManagementConsoleから変更しようとしてもダメ。

ナンデ?と思った自分は、とりあえず下を見て理解しました。
そらそうだ。Key-Value型の単なるデータストアなんだもんね…

「Amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする」
https://dev.classmethod.jp/cloud/aws/amazon-s3-folders/

新規フォルダを作成→中身コピー→元フォルダを削除

どないせいっちゅうんじゃ、となりますが以下で実現可能できました。
Unix/Linuxにおけるリネームコマンドと同じ要領ですね。

public void changeFolderName(String bucketName, String oldPrefix, String newPrefix){
    AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());
    ObjectListing listing = s3.listObjects(bucketName, oldPrefix);

    for (S3ObjectSummary summary: listing.getObjectSummaries()) {
      String oldKey = summary.getKey();
      String newKey = new StringBuilder().append(newPrefix).append(oldKey.substring(oldPrefix.length())).toString();
      s3.copyObject(bucketName, oldKey, bucketName, newKey);
      s3.deleteObject(bucketName, oldKey);
    }
}
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6