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

Dus*_*tuu 6 c# .net-core wwwroot blazor blazor-webassembly

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

string[] images = Directory.GetFiles(@"wwwroot\images", "*.jpg");
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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

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

我究竟做错了什么?谢谢。

Hen*_*man 5

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

./tmp
./home
./dev
./proc
./zoneinfo
Run Code Online (Sandbox Code Playgroud)

您可以获取一些预先打包的文件和文件夹。但它们都不包含 wwwroot 和您想要的内容。

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

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

  • 我正在使用 blazor wasm 创建一个静态博客,对我有用的唯一方法是使用预构建脚本构建一个“Json”元数据文件,并使用“HttpClient”请求它,以便跟踪文件计数、日期和其他信息元数据。希望将来这会更容易。 (3认同)