簡體   English   中英

如何從 Blazor 服務器端下載內存文件

[英]How to download in-memory file from Blazor server-side

有沒有辦法下載在Blazor服務器端的內存中動態生成的文件,而無需將其存儲在文件系統上?

解決方案是將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;
        }


    }
  1. 調整 Blazor 應用程序的Startup.cs以支持控制器路由:
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");

            });

        }

在 Blazor 中創建一個 cshtml 頁面,如下所示。

文件下載.cshtml.cs:

public class FileDownloadsModel : PageModel
{        
    public async Task<IActionResult> OnGet()
    {
        byte[] fileContent = ....;                                  

        return File(fileContent, "application/force-download", "test.txt");
    }       
}

文件下載.cshtml:

@page "/download/{object}/{id:int}/{fileType}" 
@model GFProdMan.Pages.FileDownloadsModel

就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM