C#列出amazon S3文件夹下所有文件名的文件

Jam*_*eel 9 c# amazon-s3 amazon-web-services

使用C#和amazon .Net SDK,能够列出亚马逊S3文件夹中的所有文件,如下所示:

ListObjectsRequest request = new ListObjectsRequest();           
            request.BucketName = _bucketName; //Amazon Bucket Name
            request.Prefix = _sourceKey; //Amazon S3 Folder path           
            do
            {
                ListObjectsResponse response = _client.ListObjects(request);//_client - AmazonS3Client
Run Code Online (Sandbox Code Playgroud)

出局:

    Folder
    Folder/file1.pdf
    Folder/file2.pdf
    Folder/file3.pdf
Run Code Online (Sandbox Code Playgroud)

但我想实现这样的目标:期望输出:

file1.pdf
file2.pdf
file3.pdf
Run Code Online (Sandbox Code Playgroud)

提前致谢

Lui*_*cho 17

您还可以使用以下c#代码来检索文件信息.

    string bucketName = "your bucket";
    AmazonS3Client s3Client = new AmazonS3Client("your access key", "your secret key", cfg);
    S3DirectoryInfo dir = new S3DirectoryInfo(s3Client, bucketName, "your AmazonS3 folder name");
    foreach (IS3FileSystemInfo file in dir.GetFileSystemInfos())
    {
        Console.WriteLine(file.Name);
        Console.WriteLine(file.Extension);
        Console.WriteLine(file.LastWriteTime);
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用amazon AWSSDK.Core和AWSSDK.S3版本3.1.0.0 for .net 3.5.我希望它可以帮到你

  • .NET Core不支持命名空间Amazon.S3.IO. (4认同)
  • S3DirectoryInfo 位于 Amazon.S3.IO 命名空间下。 (3认同)

小智 11

AmazonS3Client s3Client = new AmazonS3Client(S3_ACCESS_KEY, S3_SECRET_ACCESS_KEY, S3_REGIAO);
var lista = s3Client.ListObjectsAsync(S3_BUCKET, $"{S3_SUBDIRETORIO}/{produto}/{produto}.").Result;
var files = lista.S3Objects.Select(x => x.Key);
var arquivos = files.Select(x => Path.GetFileName(x)).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到 StackOverflow。请阅读[此处](https://stackoverflow.com/help/answering)给出一个好的答案 (3认同)

nov*_*nja 9

让我们通过一些简单的描述来让它变得清晰、简单。
众所周知,S3中没有目录(文件夹)的概念。啊,什么?所以 S3 中的一切都只是对象。
让我们考虑下面的示例 s3 存储桶 - 存储桶名称为testBucket,目录名称为testDirectory,该目录包含两个文件testImage.jpgtestUserData.txt

  • 测试桶
    • 测试目录
      • 测试图像.jpg
      • 测试用户数据.txt
AmazonS3Client s3Client = new AmazonS3Client();
string bucketName = "testBucket";
// to list out all the elements inside of a director [To know more][1]
string prefix = "testDirectory/";

ListObjectsRequest request = new ListObjectsRequest
                {
                    BucketName = bucketName,
                    Prefix = prefix,
                    // Use this to exclude your directory name
                    StartAfter = prefix,
                };
ListObjectsResponse response =  s3Client.ListObjects(request);

foreach (S3Object itemsInsideDirectory in response .S3Objects)
                {
                    Console.WriteLine(itemsInsideDirectory.Key);
                }
Run Code Online (Sandbox Code Playgroud)

输出:
如果您使用“StartAfter”,则输出将为
testDirectory/testImage.jpg
testDirectory/testUserData.txt*

如果不使用“StartAfter”,则输出将为
testDirectory/
testDirectory/testImage.jpg
testDirectory/testUserData.txt


小智 8

    AmazonS3Client client = new AmazonS3Client();
    ListObjectsRequest listRequest = new ListObjectsRequest
    {
        BucketName = "your-bucket-name",
        Prefix = "example/path"
    };

    ListObjectsResponse listResponse;
    do
    {
        listResponse = client.ListObjects(listRequest);
        foreach (S3Object obj in listResponse.S3Objects)
        {
            Console.WriteLine(obj.Key);
            Console.WriteLine(" Size - " + obj.Size);
        }

        listRequest.Marker = listResponse.NextMarker;
    } while (listResponse.IsTruncated);
Run Code Online (Sandbox Code Playgroud)

https://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/M_Amazon_S3_AmazonS3_ListObjects.htm