阻止浏览器在新的浏览器窗口中播放mp3

时间:2012-02-20 20:18:26

标签: html browser mp3

有没有办法防止浏览器在新的浏览器窗口中打开mp3?

我有一个像

这样的mp3文件的正常链接
 <a href="link_to_mp3">some.mp3</a>

当然您可以通过右键单击下载 - &gt;另存为。但有些用户不知道。因此,如果他们点击链接,就会打开一个新窗口,他们可以在那里收听该mp3。

问题是,我希望用户下载文件一次,而不是通过我的服务器听一千次;)

3 个答案:

答案 0 :(得分:2)

仅通过html,您无法强制链接打开文件保存对话框。

相反,您可以通过PHP和一些自定义标头as seen here

实现这一目标

一个简单的download.php文件可能如下所示:

    <?php

     $file = $_GET['file'];
     $dir = "path/to/files/";

     if(!file)
     {
         die('file not found');
     }
     else
     {
         $local_file = $dir . $file['filename'];
         $file = fopen($local_file, "r");  


         header("Cache-Control: public");
         header('Content-Type: application/octet-stream'); 
         header("Content-Description: File Transfer");
         header("Content-Disposition: attachment; filename=$file");
         header("Content-Transfer-Encoding: binary");

         // set download rate
         $download_rate = 100.0;
         // fetch the file
         fread($file, round($download_rate * 1024)); 
         // close the file stream
         fclose($file);
     }
     ?>

您可以在其中指定保存所有文件的目录,以及下载速率(如果需要)以限制文件下载的速度。

更新

忘记提及您之后会将链接更改为:

 <a href="download.php?file=test.mp3">some.mp3</a>

其中test.mp3将更改为您的特定下载

答案 1 :(得分:1)

快速而肮脏:也许你.zip它......比浏览器自动下载文件

答案 2 :(得分:0)

感谢您的脚本。它没有为我解决,因为$ local_file变量不是正确的构建..不要问,不是真正的PHP专业版。你的帖子还是让我朝着正确的方向前进这是我的解决方案

<?php
$downloadfile = "directory/".$_GET['file'];
$filename = $_GET['file'];
$filesize = filesize($downloadfile);

header("Content-Type: audio/mpeg3"); 
header("Content-Disposition: attachment; filename=$filename"); 
header("Content-Length: $filesize");

readfile($downloadfile);
exit;
?>
哦,对于其他的php-dummies:在脚本开始时没有白色的地方!!!