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);
}
}