【问题标题】:Is there a way to forcefully prompt save-as dialog when saving an excel file in an Angular Project在Angular项目中保存excel文件时,有没有办法强制提示另存为对话框
【发布时间】:2021-01-18 18:51:40
【问题描述】:

在我的 Angular 6 项目中,每当用户尝试下载 excel 文件(我正在使用 blob)时,我都会尝试强制打开另存为对话框。有没有办法在不手动更改浏览器设置的情况下做到这一点?

谢谢。感谢您的帮助。

【问题讨论】:

  • 如果您的意思是在没有用户交互的情况下打开保存对话框,我认为浏览器不会在没有用户启动的情况下允许它

标签: angular angular6 save-as


【解决方案1】:

当我的用户下载文件时,我通常只是为文件名添加时间戳。 至少它保证文件名是唯一的。

为了在 Angular 中触发这个,我使用了这个不可见的 href 技巧。

public onDownloadClick() {
    const filename = `${new Date().toISOString()}.txt`;

    // create invisible download link.
    const element = document.createElement('a');
    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(sgf));
    element.setAttribute('download', filename);
    element.style.display = 'none';
    document.body.appendChild(element);

    // click it, and remove it.
    element.click();
    document.body.removeChild(element);
}

但它并没有真正显示“另存为”对话框,它只是立即开始下载文件。

如果你真的想使用另存为对话框,你需要在你的 Angular 项目中添加一个依赖项。

npm install file-saver
npm install @types/file-saver --save-dev

接下来,您可以在组件中导入依赖项。

import { saveAs } from 'file-saver';

public onDownloadClick() {
    const blob = new Blob(...);
    saveAs(blob, 'defaultFilename.xlsx');.
}

github 页面显示了有关saveAs 函数使用的更多详细信息。

【讨论】:

  • 感谢您发布答案@bvdb。实际上,我已经尝试过使用文件保护程序,但是下载行为仍然取决于浏览器的下载设置。我想始终提示“另存为”对话框(无论浏览器设置中设置了什么)
猜你喜欢
  • 2013-06-14
  • 2021-08-20
  • 2013-11-09
  • 2020-05-17
  • 2018-07-07
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多