[英]Blazor Download XML File with Javascript Error
我用我的应用程序生成了一个 XML 文件,我尝试下载它,感谢 blazor WebAssembly 客户端的 javascript。
我用的是微软给的方法,XDocument保存在一个Memory Stream中:
async Task DownloadFileFromStream(MemoryStream Stream,string Name)
{
var fileStream = Stream;
var fileName = Name + ".xml";
using var streamRef = new DotNetStreamReference(stream : fileStream);
await JS.InvokeVoidAsync("downloadFileFromStream",fileName, streamRef);
}
以及我的 index.html 文件中与之关联的 javascript function:
<script type="text/javascript">
window.downloadFileFromStream = async (fileName, contentStreamReference) => {
const arrayBuffer = await contentStreamReference.arrayBuffer();
const blob = new Blob([arrayBuffer]);
const url = URL.createObjectURL(blob);
const anchorElement = document.createElement('a');
anchorElement.href = url;
anchorElement.download = fileName ?? '';
anchorElement.click();
anchorElement.remove();
URL.revokeObjectURL(url);
}
</script>
但是每次调用 InvokeVoidAsync 时都会显示此错误:
Microsoft.JSInterop.JSException: Failed to fetch
TypeError: Failed to fetch
at Microsoft.JSInterop.JSRuntime.
<InvokeAsync>d__16`1[[Microsoft.JSInterop.Infrastructure.IJSVoidResult,
Microsoft.JSInterop, Version=6.0.0.0, Culture=neutral,
PublicKeyToken=adb9793829ddae60]].MoveNext()
at Microsoft.JSInterop.JSRuntimeExtensions.InvokeVoidAsync(IJSRuntime jsRuntime, String
identifier, Object[] args)
我不明白为什么因为我使用了微软提供的相同的 function。
感谢您的答复
我发现了问题所在。
当您使用 javascript function 时,您在 Do.netStreamReference 中转换的 stream 需要打开。 我的被 class 中的返回关闭,其中生成了 xml。
我只是将它从 883812976388 代 class 中移出以删除返回并将其放入与 javascript function 相同的 class 中并且它起作用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.