5

我正在尝试获取 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”的一部分。

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

4

2 回答 2

3

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

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

这是您可以获取的一些预打包文件和文件夹。但是它们都不包含 wwwroot 和您所追求的内容。

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

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

于 2020-06-28T00:10:25.013 回答
0

请获取“图像”目录路径,如下所示:

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

希望它会奏效。

于 2022-03-03T13:06:56.203 回答