html - 我正在尝试制作一个下载文件的标签,但它下载的是文件的链接,而不是实际的文件
问题描述
我想在其中创建一个<a>
标签,点击函数将在打字稿文件中执行一个名为 downloadFile() 的函数,以便下载一个日志文件。它不是下载日志文件,而是下载有效的日志文件的链接,但我想让下载显示实际的日志信息。
downloadFile() {
const blob = new Blob(['blablabla.log'], {type: 'text/log'});
const dataURL = window.URL.createObjectURL(blob);
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob);
return;
}
const link = document.createElement('a');
link.href = dataURL;
link.download = 'export file.log';
link.click();
setTimeout(() => {
window.URL.revokeObjectURL(dataURL);
}, 100);
}
解决方案
这不是通过单击从 Blob 下载文件的方式。以下是您应该如何进行:
- 用一些文件内容和一些类型创建一些 blob
- 创建一个 URL 对象。您将此值传递给
<a>
href
属性 - 创建一个
<a>
并将其download
属性设置为所需的文件名 - 使元素不可见,将其添加到 DOM,然后单击它
下面的例子:
const downloadFile = () => {
const blob = new Blob(
['Some file content'],
{type:'text/log'}
);
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href=url;
a.download='some-file-name.log';
a.style.display='none';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}
<a onclick="downloadFile()">Click me!</a>
推荐阅读
- kotlin - 在 Kotlin 中,是否有一种安全的方法来执行 ObjectInputStream.readObject?
- python - Python : "TypeError","evalue":"'list' 对象不可调用"
- python - 如何将 Selenium 点击元素与美丽的汤一起使用
- c++ - CMake 3.16.5 未添加系统包含目录
- python - 如何从自定义对象的地标检测器开始?
- vba - 在 VBA 中加速多个 ElseIf 查询的方法
- validation - 如何验证时间类型的“必需”标签
- node.js - 尝试获取资源 Passport ReactJS 和 ExpressJS 时出现 NetworkError:CORS
- javascript - 匹配以 2 个字母开头并以 3 个字母结尾的正则表达式
- r - 读取.xlsx2 | 如果 sheetName 不存在则跳过