首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法让文件流下载到Blazor中的浏览器?

在Blazor中,可以通过使用FileStreamResult类将文件流下载到浏览器。FileStreamResult是ASP.NET Core中的一个类,用于将文件流发送到客户端。

以下是实现该功能的步骤:

  1. 创建一个返回FileStreamResult的控制器方法,该方法将文件流作为参数。例如:
代码语言:txt
复制
[HttpGet]
public IActionResult DownloadFile()
{
    // 从文件系统或其他来源获取文件流
    Stream fileStream = GetFileStream();

    // 设置文件下载的名称
    string fileName = "example.txt";

    // 返回FileStreamResult
    return new FileStreamResult(fileStream, "application/octet-stream")
    {
        FileDownloadName = fileName
    };
}
  1. 在Blazor页面中,使用HttpClient来调用该控制器方法并下载文件。例如:
代码语言:txt
复制
@inject HttpClient httpClient

<button @onclick="DownloadFile">下载文件</button>

@code {
    private async Task DownloadFile()
    {
        // 调用控制器方法并获取文件流
        var response = await httpClient.GetAsync("/api/DownloadFile");
        response.EnsureSuccessStatusCode();

        // 读取文件流并下载文件
        var fileStream = await response.Content.ReadAsStreamAsync();
        await JSRuntime.InvokeVoidAsync("saveAsFile", "example.txt", fileStream);
    }
}
  1. 在Blazor的JavaScript文件中,实现saveAsFile函数,用于将文件流保存为文件。例如:
代码语言:txt
复制
window.saveAsFile = (filename, byteBase64) => {
    const blob = base64ToBlob(byteBase64);
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = filename;
    link.click();
}

function base64ToBlob(base64) {
    const byteCharacters = atob(base64);
    const byteNumbers = new Array(byteCharacters.length);
    for (let i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i);
    }
    const byteArray = new Uint8Array(byteNumbers);
    return new Blob([byteArray], { type: 'application/octet-stream' });
}

通过以上步骤,你可以在Blazor中实现将文件流下载到浏览器的功能。请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Blazor 中如何下载文件到浏览器

最近想给之前文章《下载中转加速器 VPSDownloader.NET(.NET Core 程序部署到 Linux 系统)》中提到的 VPS 文件中转下载服务添加一个前端页面,其实之前也想使用热门的前端框架 Vue 来做,也做了点工作了,但是毕竟不是前端开发,上手起来还是比较慢的,而且引入了 NodeJS 等技术栈,和后端的 ASP.NET Core WebApi 也不共存于一个项目,开发和维护起来不太方便。后来了解到了发展如火如荼的 Blazor 框架,这个是微软开发的 .NET 领域的前端框架,在某种程度上和以前的 WebForm 有点类似,不过以前那个是微软自己搞的,大家都不待见它,现在这个是符合 Web 领域新标准 WebAssembly,而且 UI 方面也可以使用现有的成熟库。总之,使用 Blazor,可以使用 C# 代码来代替(当然也是兼容的)JavaScript 代码,使 .NET 开发人员能有极致的全栈开发体验,颠覆以往那种 “师夷长技以制夷” 的前端开发方式,所以决定学习使用一下。另外,本文的 Blazor 项目使用 Blazor Server 模式,而不是 Blazor WebAssembly 模式。

01
  • 领券