blazor webassembly 从 api 下载文件

blazor webassembly download file from api

我有一个 Blazor Webassembly ASP.NET 核心托管应用程序,在服务器上我有一个控制器 returns 一个文件,在客户端上我想有一个按钮,当用户点击它下载文件,我怎样才能达到这个目的?

这是我的控制器

[HttpGet("{reportName}")]
public FileResult GetReport(string reportName)
{
     var stream = _reportPrintRepository.Print(reportName);

     return File(stream, System.Net.Mime.MediaTypeNames.Application.Pdf, reportName + ".pdf");
}

最简单的方法就是让浏览器处理:

<a class="btn btn-primary" href="@(Http.BaseAddress)YourController/Test1">download</a>

您从注入的 HttpClient 中获取基地址,并确保 URL 与您在控制器中配置的路由相匹配。

要下载文件,您必须使用 Microsoft JSInterop。 有很多方法可以实现您的请求。 我使用的一种方法是将文件作为字节数组获取,然后转换为 base64string。 最后从服务器调用您在 javascript 中创建的函数。

在服务器端

js.InvokeVoidAsync("jsOpenIntoNewTab",
                            filename,
                            Convert.ToBase64String(ReportPDF())
                            );

在客户端的js文件中

function jsOpenIntoNewTab(filename, byteBase64) {
var blob = b64toBlob(byteBase64);

var blobURL = URL.createObjectURL(blob);
window.open(blobURL);}