如何从blazor服务器端下载文件

时间:2019-08-02 13:25:32

标签: blazor blazor-server-side

我有一个服务器端的blazor应用程序,该应用程序会构建大量数据,当用户单击按钮时,它将使用该数据生成一个excel文件。所有这些都很好。但是我的问题是下载该内存文件的合适方法是什么?我知道我可以将其保存到Web服务器磁盘上并进行重定向或类似的下载操作,如果不需要的话,我希望不必将文件保存到磁盘中。

2 个答案:

答案 0 :(得分:0)

我最终使用的解决方案是JS Interop重定向到文件,然后下载该文件。

public async Task DownloadFileAsync(string path)
{
    await Js.InvokeAsync<string>("downloadFile", path);
}

// In JS
function downloadFile(filename) {
    location.href = '/api/downloads/' + filename;
}

答案 1 :(得分:0)

你可以这样做

[Route("api/[controller]"]
[ApiController]
public class DownloadController : ControllerBase
{
    [HttpGet, DisableRequestSizeLimit]
    public async Task<IActionResult> Download()
    {
        var memory = new MemoryStream();
        await using(var stream = new FileStream(@"pathToLocalFile", FileMode.Open))
        {
            await stream.CopyToAsync(memory);
        }
        memory.Position = 0;
        //set correct content type here
        return File(memory, "application/octet-stream", "fileNameToBeUsedForSave");
    }
}

在剃刀的一面

<button @onclick="onClick">download</button>

@code {

   private async Task onClick(MouseEventArgs e)
   {
        NavigationManager.NavigateTo("api/download", true);
   }
}