【问题标题】:Blazor EDGE link.Click()Blazor EDGE 链接。单击()
【发布时间】:2020-04-09 17:41:36
【问题描述】:

此示例https://blazorfiddle.com/s/o8g3elz1 在 Edge 中不起作用:

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

【问题讨论】:

    标签: file download blazor


    【解决方案1】:

    我可以通过使用来解决这个问题

    lnk.href = objectURL = url.createObjectURL(blob);
    link.dispatchEvent(new MouseEvent('click'));
    

    你应该阅读以下文章,它有助于实现下载功能:

    但是,我的解决方案有点不同,因为我不想将 base64 数据从 Blazor 服务器端发送到客户端,我完全可以避免使用 js。我创建了提供文件的 Web API 控制器,并且只使用了一个简单的 a href。示例:

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

    关键是使用 target="_blank" 以便文件可以保存并且不会在当前站点的位置打开。

    【讨论】:

      【解决方案2】:
      public async static Task LinkToFile(IJSRuntime js, string filename, byte[] data) {
          var tempFileName = DateTime.Now.Ticks + filename.Substring(filename.LastIndexOf("."));
          var path = ".\\wwwroot\\downloads\\" + tempFileName;
          await File.WriteAllBytesAsync(path, data).ConfigureAwait(false);
          await js.InvokeAsync < object > ("linkToFile", filename, "/downloads/" + tempFileName);
          //File.Delete(path);
      }
      
      function linkToFile(filename, url) {
          var link = document.createElement('a');
          link.download = filename;
          link.href = url;
          link.target = "_blank";
          document.body.appendChild(link); // Needed for Firefox
          link.click();
          document.body.removeChild(link);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-18
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        相关资源
        最近更新 更多