2013-01-20 229 views
0

当他点击“下载音乐”链接时,我想向用户显示如下所示的弹出窗口?如何在网页上添加下载音乐链接?

enter image description here

如果我使用点击一个链接后,然后下面的代码打开了浏览器内嵌音乐播放,如苹果的实时..

<a href="../mp3/horse.mp3" target="_blank">Click to download</a> 

如何防止浏览器运行音乐(没有禁用/删除这个插件)。

我想我的浏览器应该下载音乐,不应该玩它!

回答

1

首先,从锚点中删除onclick属性。你不需要为此涉及JavaScript。

其次,请求MP3时,让您的服务器返回一个content-disposition: attachment HTTP响应标头。你如何做到这一点取决于你的服务器。例如,在Apache中,如果不涉及服务器端编程语言,则可以使用a Header directive。或者,请参阅an example in Java(尽管您应该为mp3设置正确的content-type)。

+0

感谢哥们!有效! :) –

-1

点击链接调用强制将文件写入浏览器的servlet。它会被浏览器下载。 读取文件,然后将其写入响应

+0

有力吗?你什么意思? – Quentin

+0

我们只需要使用流读取文件,然后将其写入浏览器。当我们写入浏览器时,它会强制浏览器下载它。您需要将内容处置和内容类型放在标题部分。 谢谢 – Learner

+0

不,这会得到与直接从网络服务器访问相同的结果。 – Quentin

0

您可以在服务器的.htaccess文件中添加以下几行代码,以强制从服务器下载特定文件类型。然后一个正常的链接应该工作。

<FilesMatch "\.(?i:mp3)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 
0
Explaining here how I did it: 

1. Add following snippet in web.xml: 



<pre><code> 
<servlet> 
     <servlet-name>MyDownloadServlet</servlet-name> 
     <servlet-class>com.lokur.MyDownloadServlet</servlet-class>  
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyDownloadServlet</servlet-name> 
     <url-pattern>*.download</url-pattern> 
    </servlet-mapping> 

</pre></code> 

2. Add following in your servlet: 



public class MyDownloadServlet extends HttpServlet { 

    private static final long serialVersionUID = 1L; 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse response) 
      throws ServletException, IOException { 


     //Set the headers. 
     response.setContentType("application/x-download"); 
     response.setHeader("Content-Disposition", "attachment; filename=downloaded_horse.mp3"); 

    //TODO: pull the file path from the request parameters 
     InputStream fileIn = getServletContext().getResourceAsStream("mp3/horse.mp3"); 
     ServletOutputStream outstream = response.getOutputStream(); 

     byte[] outputByte = new byte[40096]; 

     while(fileIn.read(outputByte, 0, 40096) != -1) 
     { 
      outstream.write(outputByte, 0, 40096); 
     } 
     fileIn.close(); 
     outstream.flush(); 
     outstream.close(); 


    } 


} 


3. Finally this is the requested jsp: 


<pre> <code> 
     <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1" 

    %> 
    <body> 
    <form action="getMusicFile.download" method="post"> 
     Wanna download? <input type="submit" value="Download music"> 
     </form> 
    </body> 



That's all to it! 

Cheers, 
Akshay :) 
1

上nginx的,您可以在nginx.conf添加此

location ~* (.*\.mp3) { 
    types { application/octet-stream .mp3; } 
    default_type application/octet-stream; 
} 

,并在Apache中添加这对你的httpd.conf或的.htaccess

<FilesMatch "\.(?i:mp3)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 

我在http://mp3boo.cc配置上使用此功能,并很好地强制下载mp3文件。 hth