c#.netcore获取amazon s3文件夹下所有文件的ImageURL

c#.netcore获取amazon s3文件夹下所有文件的ImageURL,c#,asp.net-core,amazon-s3,C#,Asp.net Core,Amazon S3,使用C#和amazon.Net core,可以列出amazon S3文件夹中URL路径的所有文件,如下所示: public async Task<string> GetMenuUrl(entities.Restaurant restaurant) { AmazonS3Client s3Client = new AmazonS3Client(_appSettings.AWSPublicKey, _appSettings.AWSPri

使用C#和amazon.Net core,可以列出amazon S3文件夹中URL路径的所有文件,如下所示:

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

            string imagePath;
            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 fileName = files.Select(x => Path.GetFileName(x)).ToList(); //outputs Test.jpg, Test2.jpg on this line

            var fileNameJoin = string.Join(", ", fileName); 

            var result = fileNameJoin.Split(); // contains 2 files Test.jpg, Test2.jpg

            //Need AWSS3BucketUrl for all files in imagePath 
            string imageUrl = $"{_appSettings.AWSS3BucketUrl}{imagePath}{result}";

            
            return imageUrl;
        }

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


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

            var result = await _Service.GetMenuUrl(restaurant);

            
            var response = new MenuResponse()
            {
                MenuUrl = result
            };

            return response;
        }
当前正在输出的内容:

{
    "menuUrl": "https://..bucketpath../System.String[]"
}
它应该输出两个ImageURL,而不是一个,而且它似乎输出的是列表类型而不是内容

string imageUrl = $"{_appSettings.AWSS3BucketUrl}{imagePath}{result}";
您告诉C#将字符串与“result”连接起来,但“result”不是字符串,而是数组。要告诉编译器您真正想要什么,您需要从数组中取出单个字符串并使用它们

看起来您正在用我们看不到的代码将结果转换为JSON。如果是这种情况,您可以尝试从函数返回对象列表,而不是字符串,然后将其序列化为更接近预期输出的内容:

// make a simple class that will be serialized cleanly
public class MenuURL
{
    public string menuUrl;
}

// .... back in your function ....

List<MenuURL> URLs = new List<MenuURL>();

// Loop through your "results" variable
foreach (string str in result)
{
    MenuURL url = new MenuURL()
    {
        menuUrl = $"{_appSettings.AWSS3BucketUrl}{imagePath}{str}"
    };

    URLs.Add(url);
}

return URLs;

我已经在使用listobjectresponse您只使用了
listobjectresponse
,但没有使用它的任何属性。如果仔细阅读文档,您会注意到它有一个名为
S3Objects
的属性,它是响应中返回的所有S3对象的集合。您需要循环浏览该集合,以获得关于每个集合的更多详细信息。您可以使用S3Object的Key属性和我共享的另一个链接来创建图像的url;
// make a simple class that will be serialized cleanly
public class MenuURL
{
    public string menuUrl;
}

// .... back in your function ....

List<MenuURL> URLs = new List<MenuURL>();

// Loop through your "results" variable
foreach (string str in result)
{
    MenuURL url = new MenuURL()
    {
        menuUrl = $"{_appSettings.AWSS3BucketUrl}{imagePath}{str}"
    };

    URLs.Add(url);
}

return URLs;
 [
     {
          "menuUrl" : "https://...bucketpath../test.jpg"
     },
     {
          "menuUrl": "https://...bucketpath../test2.jpg"
     },
 ]