比如有一个pdf或者mp3的文件地址,http://ab.com/1243.pdf
如何通过网页点击不是浏览,而是直接下载呢?
你可以参考这个
如何预览以及下载pdf文件
//需要axios.js
function dowanloadpdf() {
axios({
method: 'get',
url:
'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8e76dff9-ce38-4577-9e5c-398943705060/a5b050b8-3fa1-4436-b231-7b40725de731.pdf',
responseType: 'blob',
}).then(function (response) {
const link = document.createElement('a')
let blob = new Blob([response.data], { type: response.data.type })
let url = URL.createObjectURL(blob)
link.href = url
link.download = '前端工程师必备技能.pdf'
link.click()
})
}
楼上给的答案是标准做法,但 MDN 文档里有一句 “download
属性对下载而言未必有效”。
比如跨域的时候就无效,如果是跨域的话你可以搜一下“JS 下载跨域文件”,有些方案对于同源但是无法通过 a
标签下载的文件也是有效的。
download有兼容性问题时的替代方案
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<button id="download">下载</button>
<script>
const download = (url) => {
let link = document.createElement("a");
link.style.display = "none";
link.target = "_blank";
link.href = url;
const event = new MouseEvent("click");
link.dispatchEvent(event);
};
document.getElementById("download").addEventListener("click", () => {
download("https://github.com/AleeeKoi/js-file-downloader/archive/refs/tags/v1.1.19.zip");
});
</script>
</body>
</html>
<a download="" href='***'>下载</a>
浏览器针对不同格式文件,a链接处理方式不同
文件不跨域 => 下载
文件跨域 + 浏览器不支持解析 => 下载
文件跨域 + 浏览器可以解析 => 新标签中打开
stackOverflow上的例子
const a = document.createElement('a')
a.href = 'downloadUrl'
a.download='filename.ext'
document.body.appendChild(a)
a.click()
a.remove()
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
我的方案,拿走不谢,亲测有用