【问题标题】:How can I get a list of file paths for static image files in Blazor WebAssembly?如何在 Blazor WebAssembly 中获取静态图像文件的文件路径列表?
【发布时间】:2020-10-18 07:21:37
【问题描述】:

我正在尝试获取 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 Server - 我正在使用 Blazor WebAssembly。
  • 我认为您不能在 Blazor WebAssembly 应用程序中运行此代码。我知道如果你想读取位于 wwwroot 文件夹中的 json 文件的内容,你应该使用 HTTP 调用。但是,我猜想,只能使用 JSInterop 来检索文件的名称。试试 JSInterop,也许你会成功。

标签: c# .net-core blazor blazor-webassembly wwwroot


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 因此,如果您运行的是 Blazor wasm 独立(非托管)应用程序,则无法枚举 content-rootweb-root 路径?
  • 不,我不知道。没错,启动后没有 web-root 路径。那是服务器的事情。需要时询问 API。
  • 我正在使用 blazor wasm 创建一个静态博客,唯一对我有用的方法是使用预构建脚本构建一个 Json 元数据文件并使用 HttpClient 请求它以保持跟踪文件计数、日期和其他元数据。希望这在未来会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多