如何从 Blazor 服务器端下载内存文件

Yur*_*kow 6 file download blazor blazor-server-side

有没有办法下载在Blazor服务器端的内存中动态生成的文件,而无需将其存储在文件系统上?

Yur*_*kow 7

解决方案是将Web Api控制器添加到 Blazor 服务器端应用程序中。

  1. Controllers/DownloadController.cs控制器添加到 Blazor 应用程序的根目录:
[ApiController, Route("api/[controller]")]
    public class DownloadController : ControllerBase {

        [HttpGet, Route("{name}")]
        public ActionResult Get(string name) {

            var buffer = Encoding.UTF8.GetBytes("Hello! Content is here.");
            var stream = new MemoryStream(buffer);
            //var stream = new FileStream(filename);

            var result = new FileStreamResult(stream, "text/plain");
            result.FileDownloadName = "test.txt";
            return result;
        }


    }
Run Code Online (Sandbox Code Playgroud)
  1. 调整Startup.csBlazor 应用程序以支持控制器路由:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {

            ...

            app.UseRouting();

            app.UseEndpoints(endpoints => {

                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action}");

                endpoints.MapControllers();

                endpoints.MapBlazorHub();
                endpoints.MapFallbackToPage("/_Host");

            });

        }
Run Code Online (Sandbox Code Playgroud)

  • 使用 JS-interop 很容易避免上述问题,如此处所述;https://www.syncfusion.com/kb/10358/how-to-create-a-pdf-file-in-blazor-using-c (3认同)