如何使用 Blazor 上传本地 json 文件

How to upload a local json file using Blazor

我正在尝试 select 本地 json 文件并将其加载到我的 Blazor 客户端组件中。

 <input type="file" onchange="LoadFile" accept="application/json;.json" class="btn btn-primary" />
protected async Task LoadFile(UIChangeEventArgs args)
        {
            string data = args.Value as string;
        }

P,S我不明白,我在检索文件时需要同时跟踪文件名和内容吗?

我猜您正在尝试读取客户端 (Blazor) 上 JSON 文件的内容,对吧?为什么不在服务器上!?

总之,args.Value只能提供给你文件名。为了读取文件的内容,您可以使用 FileReader API(参见此处:https://developer.mozilla.org/en-US/docs/Web/API/FileReader)。这意味着您应该使用 JSIntrop 与 FileReader API 进行通信。但在您开始之前,我建议您尝试查明此 API 是否已由社区实施(例如 localStorage 等)。您可能还需要将读取的内容反序列化为有意义的内容,例如 C# 对象。

希望这对您有所帮助...

有一个工具可以提供帮助,但目前不支持 3.0 预览版。 https://github.com/jburman/W8lessLabs.Blazor.LocalFiles

(与开发商无从属关系)

输入控件将为您提供文件的位置作为完整路径以及文件名。那你还是要找回文件,下载到服务器。

响应较晚,但 3.1 有一个额外的 AspNetCore.Components 模块,您可以通过 NuGet 下载以访问 HttpClient 扩展。这些使它变得简单:

// fetch mock data for now
var results = await _http.GetJsonAsync<WellDetail[]>("sample-data/well.json");

您可以从输入控件中插入文件的位置来代替 "sample-data/well.json" 字符串。

类似于:

using Microsoft.AspNetCore.Components;

private async Task<List<MyData>> LoadFile(string filePath)
{
  HttpClient _http;

  // fetch data 
  // convert file data to MyData object
  var results = await _http.GetJsonAsync<MyData[]>(filePath);

  return results.ToList();
}