javascript - 以角度下载后打开或保存文件
问题描述
我有一个用例,如果文件可以在新选项卡中打开,它应该在新选项卡中打开。如果没有,它将使用给定的名称保存(名称应该是动态设置的名称)。
我目前有以下片段:
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()但这不支持将所需的名称设置为文件。
有没有办法做到这一点?另外,在下载之前如何确定文件是否可以在新选项卡中打开?如果我知道文件无法打开,在这种情况下我会下载,否则我会在新选项卡中打开它。
解决方案
要强制下载,您需要在响应标头中设置Content-Disposition标头
打开文件或下载取决于。例如打开 PDF,如果您的浏览器支持 PDF 查看器,它会打开,否则会自动下载
推荐阅读
- html - 如何在不冲突的情况下将两个 div 彼此相邻对齐?
- java - 我的 for 循环中没有代码正在运行 - Java 8 SE
- regex - 搜索词后的 Regx 唯一数字
- swift - 如何在 Swift 中使用查询项解析 URL # 片段
- c# - 如何在 WCF 中序列化对象类型?
- javascript - 如何使用 Javascript 更改图像色调
- arrays - 将数组限制为多种特定数据类型
- typescript - TypeScript 编译看似无效的变量类型声明
- android - Android BLE 接收器/发送器堆栈 - 跨多个活动
- react-native - 使用 react-native-signature-capture 的多个签名保存在同一个文件中