c# - 从 ASP.NET Core api 从 Blazor 客户端应用程序下载文件

标签 c# asp.net-core client blazor webassembly

我创建了一个 ASP.NET Core api Controller ,它返回一个 FileStreamResult 对象。 (如果需要,我可以更改结果类型)

Get函数的代码如下:

[HttpGet("[action]/{p_gInspectionID}/{p_nIndex}")]
public async Task<FileStreamResult> GetInspectionPictureToDownload(Guid p_gInspectionID, int p_nIndex)
{
  var l_strFilePath = await GetPictureFilePathAsync(p_gInspectionID, p_nIndex);

  using (var l_sReader = System.IO.File.OpenRead(l_strFilePath))
  {
    return (File(l_sReader, "image/jpeg"));
  }
}

现在我需要在 Blazor (Webassembly) 客户端应用程序中使用这个结果。

我的目标是有一个按钮来在用户点击文件时在浏览器中启动文件的 下载

这应该会启动浏览器的下载功能。
是否可以在 Blazor 客户端应用程序中实现这一点?

最佳答案

我试图做同样的事情,但我的 API 已获得授权,因此在阅读此 article 后,我最终下载了 Web 程序集应用程序中的字节,并使用 JavaScript 从字节下载文件。

function downloadFromByteArray(options: { 
  byteArray: string, 
  fileName: string, 
  contentType: string
}): void {

  // Convert base64 string to numbers array.
  const numArray = atob(options.byteArray).split('').map(c => c.charCodeAt(0));

  // Convert numbers array to Uint8Array object.
  const uint8Array = new Uint8Array(numArray);

  // Wrap it by Blob object.
  const blob = new Blob([uint8Array], { type: options.contentType });

  // Create "object URL" that is linked to the Blob object.
  const url = URL.createObjectURL(blob);

  // Invoke download helper function that implemented in 
  // the earlier section of this article.
  downloadFromUrl({ url: url, fileName: options.fileName });

  // At last, release unused resources.
  URL.revokeObjectURL(url);
}

关于c# - 从 ASP.NET Core api 从 Blazor 客户端应用程序下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61802606/

相关文章:

javascript - 如何模拟慢速客户端(浏览器)?

c# - 如何在 OpenXML SDK 中拆分文档

c# - 人脸API "Access denied due to invalid subscription key..."

c# - 使用不产生任何结果的 Include 将关闭阅读器

active-directory - 使用 Asp.NET Core 在 Linux 上集成 Windows 身份验证

c - 向客户端 C 显示文件夹服务器的内容

c# - 使用 SharpZipLib 压缩大文件导致内存不足异常

c# - 我可以为每个请求使用带有方法参数的 ServiceStack 路由而不是 DTO 类吗?

asp.net-core - 如何在 F# Asp Core Web API 中序列化 F# 可区分的联合类型

java - Jersey 2.22 : When should I close the Client instance?