gpt4 book ai didi

c# - 在 blazor 中将字节数组转换回 PDF

转载 作者:行者123 更新时间:2023-12-05 04:36:06 25 4
gpt4 key购买 nike

我正在尝试从我的 WebAPI 作为 byte[] (byteArray) 发送的 blazor 下载 PDF 文件。我知道我的 PDF 正在运行,因为当我将它作为 filestreamResult 发送并直接从我的 WebAPI 检索它(例如使用 swagger)时,我得到了正确的 PDF 文件。

我的 WebAPI:

var response = await GetResponse(new Query(request.AnalysisDate), ct);
string html = await _templateService.PerformanceReport(response);
MemoryStream stream = _pdfService.GeneratePdf(html);
return await stream.ToArray(); // as byte[]

Blazor 端:

var bytes = await _http.GetByteArrayAsync(endpoint);  
await JsRuntime.InvokeVoidAsync("BlazorDownloadFile", "file.pdf", "application/pdf", bytes);

JS:

function BlazorDownloadFile(filename, contentType, content) {
// Create the URL
const file = new File([content], filename, { type: contentType });
const exportUrl = URL.createObjectURL(file);

// Create the <a> element and click on it
const a = document.createElement("a");
document.body.appendChild(a);
a.href = exportUrl;
a.download = filename;
a.target = "_self";
a.click();

// We don't need to keep the object url, let's release the memory
// On Safari it seems you need to comment this line... (please let me know if you know why)
URL.revokeObjectURL(exportUrl);
}

我正确地下载了一个名为 file.pdf 的 PDF 文件,但它看起来已损坏。

这是 .NET 6 的正确方法吗?

我应该从 Web API 发送 FileStreamResult(我喜欢我可以直接从 swagger 获取文件这一事实)吗?

我真的找不到关于如何做到这一点的 blazor 的好例子。任何帮助将不胜感激。

最佳答案

我正在使用另一种方法。我发送 base64String。我将字节数组转换为 base64 字符串,然后将字符串传递给 javascript 函数

服务器端调用:

js.InvokeVoidAsync("jsSaveAsFile",
filename,
Convert.ToBase64String(GetFileByteArrayFunction())
);

javascript 函数:

function jsSaveAsFile(filename, byteBase64) {
var link = document.createElement('a');
link.download = filename;
link.href = "data:application/octet-stream;base64," + byteBase64;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);}

js -> 使用 Microsoft.JSInterop。

关于c# - 在 blazor 中将字节数组转换回 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70891924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com