我创建了一个 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/