如何从Blazor服务器端下载内存文件
问题描述:
是否有一种下载文件的方法,该文件是在 Blazor 服务器端中在内存中动态生成的 而不需要将其存储在文件系统上?
Is there a way to download a file, generated dynamically in memory in Blazor Server Side without need to store it on a filesystem?
答
解决方案是在Blazor服务器端应用程序中添加 Web Api contoller.
The solution was in adding Web Api contoller into Blazor server side app.
- 将
Controllers/DownloadController.cs
控制器添加到Blazor应用程序的根目录:
- Add
Controllers/DownloadController.cs
controller to the root of Blazor app:
[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;
}
}
- 调整Blazor应用程序的
Startup.cs
以支持控制器路由:
- Adjust
Startup.cs
of the Blazor app to support controllers routing:
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");
});
}