首页 > 解决方案 > 以角度下载后打开或保存文件

问题描述

我有一个用例,如果文件可以在新选项卡中打开,它应该在新选项卡中打开。如果没有,它将使用给定的名称保存(名称应该是动态设置的名称)。

我目前有以下片段:

         if (windowService.navigator.msSaveOrOpenBlob) {
             windowService.navigator.msSaveOrOpenBlob(file, fileName);
         } else {
             const link: HTMLAnchorElement = document.createElement("a") as HTMLAnchorElement;
             link.href = windowService.URL.createObjectURL(file);
             if (fileName) {
                 link.download = fileName;
             }
             link.target = "_blank";
             document.body.appendChild(link);
             link.click();
             document.body.removeChild(link);
         }

当我使用它时,所有文件都被下载(包括 pdf/text,否则在尝试使用 window.open() 时会在新选项卡中打开)。 我的要求是:如果文件可以在新选项卡中打开,它们应该在新选项卡中打开(例如 pdf/text 等(在尝试使用 window.open() 时会在新选项卡中打开)。)。我知道我可以使用window.open()但这不支持将所需的名称设置为文件。

有没有办法做到这一点?另外,在下载之前如何确定文件是否可以在新选项卡中打开?如果我知道文件无法打开,在这种情况下我会下载,否则我会在新选项卡中打开它。

标签: javascriptangularwindow

解决方案


要强制下载,您需要在响应标头中设置Content-Disposition标头

打开文件或下载取决于。例如打开 PDF,如果您的浏览器支持 PDF 查看器,它会打开,否则会自动下载


推荐阅读