【问题标题】:Blazor WASM Hosted - How to download a file using HttpPostBlazor WASM 托管 - 如何使用 HttpPost 下载文件
【发布时间】:2021-01-12 04:39:51
【问题描述】:

我有一个 Blazor WASM 托管应用程序,该应用程序有一个 API 端点,该端点接受正文中的模型。然后,控制器将模型的属性转换为 PDF 并返回 FileStreamResult。

由于我有请求正文内容,所以它必须是一个HttpPost方法;但是,我只看到使用 HttpGet 调用下载的示例。

就目前而言,我只在响应内容中获取 pdf 二进制数据。我可以使用此设置触发浏览器下载吗?还是我需要手动将byte[] 转换为客户端上的文件?

服务器控制器:

[HttpPost("DownloadPdf")]
public async Task<FileStreamResult> DownloadPdf(DownloadPdfModel model)
{
    try
    {
        var title = $"{model.Id}-{model.Description}";
        var filename = $"{title}.pdf";
        var doc = await _pdfService.HtmlToPdf(model.Html);

        return File(doc.Stream, "application/pdf", filename);
    }
    catch (Exception)
    {
        return null;
    }
}

客户端 Http 服务:

public async Task DownloadPdf(DownloadPdfModel model)
{
    var content = new StringContent(JsonConvert.SerializeObject(model), System.Text.Encoding.UTF8, "application/json");

    using var response = await _httpClient.PostAsync("api/FooBar/DownloadPdf", content);

    response.EnsureSuccessStatusCode();

    var result = await response.Content.ReadAsStreamAsync();
    // Can I invoke the browser download here or manually using System.IO?
}

【问题讨论】:

    标签: https blazor blazor-webassembly


    【解决方案1】:

    您可以使用此软件包:https://github.com/arivera12/BlazorDownloadFile。 这是一些示例代码,其中 httpResponseMessage 是来自服务器的包含文件内容的响应,在我的例子中,它将它作为 Excel 文件“下载”到浏览器中。

                if (httpResponseMessage.IsSuccessStatusCode)
                {
                    byte[] bytes = await httpResponseMessage.Content.ReadAsByteArrayAsync();
    
                    await BlazorDownloadFileService.DownloadFile("filename.xlsx",
                        bytes,
                        contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                }
    

    【讨论】:

    • 它有效但并不理想。稍后我将尝试重构我的代码,以代替客户端在 api 上呈现 html 字符串
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2022-11-14
    • 2021-08-02
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多