很多朋友做网站时候想要实现点击a标签下载MP3文件,但是会遇到点击a标签就直接打开新的页面播放了,不是下载文件。今天就来说说如何处理这个问题。
网上看了很多帖子,总结了几个方法。
方法1. 把下载放到后端处理,前台html通过ajax请求后端,然后下载。
方法2. 通过a标签download属性下载。实验了几次这种方法。发现需要相对路径才可以,绝对路径会打开新页面播放。
因为是纯html+js来实现点击a标签下载,所以这里来说说方法2的具体实现步骤。
首先,说下遇到的情况。因为我这里为了方便后台使用,直接用的是百度ueditor编辑器插入音频Audio,实现音频播放的。接下来看具体的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>纯html+js来实现点击a标签下载</title>
<!-- 引入jQuery库 -->
<script src="js/jquery-1.9.1.min.js" type="text/javascript"></script>
<!-- 页面样式文件 -->
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- 按钮文件区域 -->
<div id="anq">
<a href="#" onclick="control()">播放/暂停</a>
<a href="#" onclick="repeat()" >重新开始</a>
<a href="#" id="xz" download="{$title}">下载音频</a> <!-- {$title}是从后台传过的音频名称 -->
</div>
<!-- 后台编辑器发布内容区域开始 -->
<!-- 因为百度编辑器直接插入的audio标签,所以没有id选择器 -->
<p style="text-align: center;">
<audio class="audio-js" controls="" preload="none" src="http://www.12564.cn/ueditor/upload/1616382683569438.mp3" >
</audio>
</p>
<!-- 后台编辑器发布内容区域结束 -->
<!-- 给audio加入选择器 -->
<script>
var obj = document.getElementsByTagName("audio")[0]; //查询Adudio标签
obj.setAttribute("id","myaudio") //给Audio标签加上 id="myaudio"
var path = document.getElementById("myaudio").src=obj.src; //获取Adudio标签里MP3音乐文件路径
url = path.replace(/^http:\/\/[^/]+/, ""); //过滤掉MP3音乐文件路径里的网址
//alert(url);
document.getElementById("xz").href=url; //得到MP3音乐文件的相对路径,并把它赋值到下载音频按钮的 href=""里面,这样就完成点击下载了。
</script>
<!-- 判断页面是否含有audio标签,有就显示播放暂停和下载按钮,没有就隐藏 -->
<script>
if(document.getElementById("myaudio")){
} else {
document.getElementById("anq").style.display="none";//隐藏
}
</script>
<!-- 移动按钮位置 让播放暂停下载按钮始终在Aduio标签下面 -->
<script language="javascript">
$("#anq").insertAfter($("#myaudio"));
</script>
<!-- 播放暂停控制 -->
<script language="javascript" type="text/javascript">
function repeat() {
var audio = document.getElementById('myaudio');
audio.currentTime = 0; //重新播放
}
function control() {
var audio = document.getElementById('myaudio');
if (audio !== null) {
if (audio.paused) {
audio.play(); // 播放
} else {
audio.pause(); // 暂停
}
}
}
</script>
</body>
</html>最终效果如下:

通过以上代码就可以在html里面完成点击a标签直接下载音频了,如果你也有这个需求就去试试吧。
如果内容有帮助,就点个赞吧!
