如何在相同文件名但路径不同的情况下本地保存S3文件

时间:2019-11-21 15:10:30

标签: amazon-s3 .net-core

我正在使用.Net Core 3.0从S3存储桶下载一些文件。

存储桶的结构如下:

my_folder
prod
    year
        month
            day
                hour
                    minute
                        - joe
                        - jack
                        - john
                        - jacob

我创建了一个循环,成功下载了最近十分钟的文件:

foreach(string objectKey in getObjectKeyNames(dispatch))
{
    request1.Key = objectKey;
    try
    {
        using (GetObjectResponse response1 = await s3Client.GetObjectAsync(request1))
        {
            CancellationTokenSource source = new CancellationTokenSource();
            CancellationToken token = source.Token;
            await response1.WriteResponseStreamToFileAsync(@"C:\temp\" + objectKey, false, token);
        }
    }
    catch(Exception e)
    {
        Console.WriteLine("error");
    }
}

我遇到的问题是:

await response1.WriteResponseStreamToFileAsync(@"C:\temp\" + objectKey, false, token);

这将在c:temp中创建与上面所示相同的结构,而我只想下载所有文件,因为每个文件名在c:temp中都是唯一的。因此要明确地说,我只希望C:temp中的所有文件都没有文件夹结构。

objectKey是具有以下格式的文件名

  

my_folder / prod / 2019/11/21/13/26 / 2019_11_21_13_26_joe.json

文件名将为2019_11_21_13_26_joe.json

有意义的希望

1 个答案:

答案 0 :(得分:1)

签出Get a file name from a path in C#。具体来说,Path.getFileName()

objectKey = Path.getFileName(objectKey);
await response1.WriteResponseStreamToFileAsync(@"C:\temp\" + objectKey, false, token);