File Blazor边缘链接。单击()

File Blazor边缘链接。单击(),file,download,blazor,File,Download,Blazor,此示例在Edge中不起作用: 函数saveAsFile(文件名,bytesBase64){ var link=document.createElement('a'); link.download=文件名; //link.href=“数据:应用程序/octet流;base64,”+bytesBase64; link.href=“数据:,”+bytesBase64; document.body.appendChild(link);//Firefox需要 link.click(); document.

此示例在Edge中不起作用:

函数saveAsFile(文件名,bytesBase64){
var link=document.createElement('a');
link.download=文件名;
//link.href=“数据:应用程序/octet流;base64,”+bytesBase64;
link.href=“数据:,”+bytesBase64;
document.body.appendChild(link);//Firefox需要
link.click();
document.body.removeChild(link);
}

我通过使用

lnk.href = objectURL = url.createObjectURL(blob);
link.dispatchEvent(new MouseEvent('click'));
您应该阅读以下文章,这有助于实现下载功能:

Hoewever,我的解决方案有点不同,因为我不想将base64数据从Blazor服务器端发送到客户端,我可以避免使用js。我创建了交付文件的Web API控制器,只需使用一个简单的a href。例如:

<a href="/api/GetPdf/1234" target="_blank">Download File</a>

关键是要使用target=“\u blank”,这样文件就可以保存,而不会代替当前站点打开

公共异步静态任务链接文件(IJSRuntime js,字符串文件名,字节[]数据){
var tempFileName=DateTime.Now.Ticks+filename.Substring(filename.LastIndexOf(“.”);
var path=“.\\wwwroot\\downloads\\”+tempFileName;
wait File.writeAllBytes同步(路径、数据).ConfigureAwait(false);
等待js.InvokeAsync(“linkToFile”,filename,“/downloads/”+tempFileName);
//删除(路径);
}

函数链接文件(文件名、url){
var link=document.createElement('a');
link.download=文件名;
link.href=url;
link.target=“_blank”;
document.body.appendChild(link);//Firefox需要
link.click();
document.body.removeChild(link);
}