因此,我想让用户从服务器直接下载 MP3 文件更加困难(只是直接进入源文件的URL
)。我一直在环顾四周,从收集的资料来看,一个很好的方法是将Audio
对象转换为一次性使用的Blob
(类似于 YouTube 做到)。
作为一个例子,像这样:
<!-- directly accessible, unobfuscated url -->
<audio src="www.mywebsite.com/media.mp3"></audio>
将成为:
<!-- visiting the link would lead to a 'your file was not found' page
and the original url is now obfuscated -->
<audio src="blob:http://www.mywebsite.com/6fc4f9d2-035a-4999-b330-96da04c0f6a8"></audio>
此刻,这就是我的做法:
var url = "http://www.mywebsite.com/media.php"; // media.php points to an mp3 file
var audio = null; // just for simplicity sake - i'm not actually doing it like this
if(!audio){
audio = new Audio(url);
} else {
audio.pause();
audio.src = url;
}
现在我正在查看this答案(以及其他几个答案),但是它们要么涉及使用从input
中选择的文件,要么就是使用该文件作为Base64
字符串并将 that 转换为Blob
,我不知道该怎么做,也很难想象在客户端上要完成的工作很繁重。
基本上,我需要做的就是将url
转换为Blob
,该会话只能在该会话中使用一次(不能在另一个选项卡中直接访问-仅在播放一次时使用) (例如)。
注意::我标记了PHP
,因为这也可能是服务器端的问题,如果有必要,请随时更正 。