web-dev-qa-db-ja.com

Blazorサーバー側からインメモリファイルをダウンロードする方法

Blazorサーバーのメモリに動的に生成されたファイルをダウンロードする方法はありますかSideファイルシステムに保存する必要はありませんか?

5
Yurii Zhukow

解決策は、Blazorサーバー側アプリにWeb Apiコントローラーを追加することでした。

  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. 調整Startup.csコントローラーのルーティングをサポートするBlazorアプリの例:
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");

            });

        }
6
Yurii Zhukow