@page "/" @inject IJSRuntime js <h4>Example. How to download file in Blazor application.</h4> <button @onclick="DownloadFile">Download</button> @functions { void DownloadFile() { var text = "Hello, world!"; var bytes = System.Text.Encoding.UTF8.GetBytes(text); FileUtil.SaveAs(js, "HelloWorld.txt", bytes); } }
namespace BlazorFiddleProject { using Microsoft.AspNetCore.Components.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.JSInterop; using System.Threading.Tasks; using System; public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IComponentsApplicationBuilder app) { app.AddComponent<App>("app"); } } public static class FileUtil { public async static Task SaveAs(IJSRuntime js, string filename, byte[] data) { await js.InvokeAsync<object>( "saveAsFile", filename, Convert.ToBase64String(data)); } } }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width"> <title>BlazorFiddleProject</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"/> <style> </style> <script type="text/javascript"> function saveAsFile(filename, bytesBase64) { var link = document.createElement('a'); link.download = filename; link.href = "data:application/octet-stream;base64," + bytesBase64; document.body.appendChild(link); // Needed for Firefox link.click(); document.body.removeChild(link); } </script> </head> <body> <app>Loading...</app> <script src="_framework/blazor.webassembly.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.bundle.min.js"></script> </body> </html>

Add component

BlazorFiddle was updated from Blazor 0.7 to .NET 6.0. Your old source code could not work. You need to upgrade to latest.