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);}
我有一个 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);}