【问题标题】:c# .netcore List all files under amazon s3 folderc# .net core 列出amazon s3文件夹下的所有文件
【发布时间】:2020-11-04 08:25:55
【问题描述】:

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

      public async Task<string> GetMenuUrl(entities.Restaurant restaurant)
        {
        AmazonS3Client s3Client = new AmazonS3Client(_appSettings.AWSPublicKey, _appSettings.AWSPrivateKey, Amazon.RegionEndpoint.APSoutheast2);

        string imagePath;
        string restaurantName = trimSpecialCharacters(restaurant.Name);
        int restaurantId = restaurant.RestaurantId;
        ListObjectsRequest listRequest = new ListObjectsRequest();
        ListObjectsResponse listResponse; 

        imagePath = $"Business_menu/{restaurantId}/";
        listRequest.BucketName = _appSettings.AWSS3BucketName;
        listRequest.Prefix = imagePath;
        do
        {
            listResponse = await s3Client.ListObjectsAsync(listRequest);

        } while (listResponse.IsTruncated);

        var files = listResponse.S3Objects.Select(x => x.Key);
        var arquivos = files.Select(x => Path.GetFileName(x)).ToList();
        

        return arquivos.ToString();

    }

目前,arquivos 返回一个包含两个图像(image1.jpg、image2.jpg)的列表,这与预期的一样,然后我将其作为字符串返回。

但是当我去从另一个函数调用这个方法时。

       public async Task<VenueMenuResponse> GetVenueMenuUrl(int restaurantId)
        {

            var restaurant = await _context.Restaurant.Where(w => w.RestaurantId == restaurantId).FirstOrDefaultAsync();

            var result = await _storyService.GetMenuUrl(restaurant);

            var response = new MenuResponse() //just contains string variable called MenuUrl
            {
                MenuUrl = result
            };

            return response;
        }

它返回这个:

{
    "menuUrl": "System.Collections.Generic.List`1[System.String]"
}

当我希望它返回时

{
    "menuUrl": "Image1.jpg"
},
{
    "menuUrl": "Image2.jpg"
}

【问题讨论】:

    标签: c# asp.net-core amazon-s3


    【解决方案1】:

    您需要迭代思想results 并返回结果列表。

       public async Task<IEnumerable<VenueMenuResponse>> GetVenueMenuUrl(int restaurantId)
        {
    
            var restaurant = await _context.Restaurant.Where(w => w.RestaurantId == restaurantId).FirstOrDefaultAsync();
    
            var result = await _storyService.GetMenuUrl(restaurant);
    
            var response = result.Select(e => new MenuResponse() //just contains string variable called MenuUrl
            {
                MenuUrl = e
            };
    
            return response;
        }
    

    【讨论】:

    • 它仍然显示相同的响应,只是它被分解为一个列表
    • var 结果仍然等于“System.Collections.Generic.List`1[System.String]”
    • 必须与它是如何从 arquivos.ToString();到 GetVenueMenuUrl
    • 列表内容似乎正在输出和对象而不是列表内容
    【解决方案2】:
    var result = string.Join(", ", fileName);
    

    List 的默认 ToString() 实现只是打印类型的名称。

    这条神奇的线设法为我解决了问题。列表最初只是输出对象而不是列表的实际内容。

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 1970-01-01
      • 2019-05-26
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 2013-05-01
      相关资源
      最近更新 更多