Blazor WASM Hosted - 如何使用 HttpPost 下载文件
Blazor WASM Hosted - How to download a file using HttpPost
我有一个 Blazor WASM 托管应用程序,它有一个 API 端点,可以接受主体中的模型。然后控制器将模型的属性转换为 PDF 和 returns FileStreamResult。
既然我有request body内容,那肯定是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://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");
}
我有一个 Blazor WASM 托管应用程序,它有一个 API 端点,可以接受主体中的模型。然后控制器将模型的属性转换为 PDF 和 returns FileStreamResult。
既然我有request body内容,那肯定是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://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");
}