概要
AWSの公式ドキュメントの通りにやると、バケット内のファイル一覧は取得できるけど、特定フォルダー内のファイル一覧の取得方法が分からなかったので調査。
ファイル一覧を取得するにはListObjectsV2Request
を使用する。
コード
BucketName/Test/Template
└ file1.js
└ file2.js
というS3の構成でfile1.js
とfile2.js
を取得したい場合以下のようになる
ListObjectsTest.cs
static async Task ListingObjectsAsync()
{
ListObjectsV2Request request = new ListObjectsV2Request
{
BucketName = bucketName,
Prefix = "Test/Template/", // ← 一覧を取得したいフォルダのキーをPrefixに指定する。
MaxKeys = 10
};
ListObjectsV2Response response;
do
{
response = await client.ListObjectsV2Async(request);
// Process the response.
foreach (S3Object entry in response.S3Objects)
{
Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size);
// 以下の内容が取得できる
// [0] BucketName/Test/Template ←なぜかPrefixで設定したキーが取得される
// [1] BucketName/Test/Template/file1.js
// [2] BucketName/Test/Template/file2.js
}
Console.WriteLine("Next Continuation Token: {0}", response.NextContinuationToken);
request.ContinuationToken = response.NextContinuationToken;
} while (response.IsTruncated);
}
取得結果
// [0] BucketName/Test/Template
// [1] BucketName/Test/Template/file1.js
// [2] BucketName/Test/Template/file2.js
ファイル一覧を取得できるが、ListObjectsV2Request#Prefix
で設定した内容が[0]
に入る。
これが困る場合、値のSizeは0らしいので、Sizeを見て対応するのがよさそう。