如何在 Blazor WebAssembly 中获取静态图像文件的文件路径列表?

How can I get a list of file paths for static image files in Blazor WebAssembly?

我正在尝试获取 Blazor WebAssembly 项目中我的 wwwroot 文件夹内的静态文件列表。这是我到目前为止尝试过的:

string[] images = Directory.GetFiles(@"wwwroot\images", "*.jpg");

我收到这个错误:

crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
  Unhandled exception rendering component: Could not find a part of the path '/wwwroot\images'.

System.IO.DirectoryNotFoundException: 找不到路径“/wwwroot\images”的一部分。

我做错了什么?谢谢。

我的第一个想法是 Blazor WebAssembly 不应该支持 Directory.GetFiles() - 文件系统不允许您使用。
但是 运行ning System.IO.Directory.GetDirectories(".") 给出了这个输出:

./tmp
./home
./dev
./proc
./zoneinfo

哪些是您可以获得的预打包文件和文件夹。但是 none 其中包含 wwwroot 和您要查找的内容。

因此您可以使用Http.GetStreamAsync()Http.GetByteArrayAsync() 获取图像文件的内容您已经知道 的名称。没有直接扫描文件夹的方法:一种安全功能。 (我知道您可以配置 ISS 以允许 'browsing' 一个文件夹,但这违背了最佳实践并让您 HTML 可以解析)。

如果您确实想要扫描文件夹,请构建一个 API 来执行此操作。您需要 运行 服务器上的那个。

请获取如下“图片”目录路径:

string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images");
string[] images = Directory.GetFiles(folderPath, "*.jpg");

希望它能奏效。