【发布时间】:2020-11-05 08:57:18
【问题描述】:
使用 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;
}
我想按如下方式返回每个 imageurl:
{
menuUrl : "https://...bucketpath../test.jpg"
},
{
menuUrl: "https://...bucketpath../test2.jpg"
},
当前正在输出什么:
{
"menuUrl": "https://..bucketpath../System.String[]"
}
它应该输出两个而不是一个 imageUrls,而且它似乎输出的是列表类型而不是内容。
【问题讨论】:
-
我已经在使用 listobjectresponse
-
您只使用了
listobjectresponse,但没有使用它的任何属性。如果您仔细阅读文档,您会注意到它有一个名为S3Objects的属性,它是响应中返回的所有 S3 对象的集合。您需要遍历该集合以获取有关每个集合的更多详细信息。您可以使用 S3Object 的 Key 属性和我分享的其他链接来创建图像的 url。 -
在这里使用它 var files = listResponse.S3Objects.Select(x => x.Key);
标签: c# asp.net-core amazon-s3