Este ejemplo fuerza a bajar el mp3 desde un servlet, no a ser reproducido
A veces podemos necesitar descargar un mp3 u otros archivos, no reproducirlos a través de nuestro navegador. La mayoría de navegadores entiendien el header de tipo de contenido application/force-download el cual nos sirve para forzar la descarga del fichero. (mp3 en este caso).
package com.web.mypackage.servlet; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Mp3Servlet extends HttpServlet { private static final long serialVersionUID = 1L; public Mp3Servlet() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletOutputStream stream = null; BufferedInputStream buf = null; try{ //my mp3 path to file String pathToFile = "C:/java/workspace/Audio/WebContent/beep.mp3"; stream = response.getOutputStream(); File mp3 = new File(pathToFile); //header to force download response.setContentType("application/force-download"); response.setContentLength((int) mp3.length()); FileInputStream input = new FileInputStream(mp3); buf = new BufferedInputStream(input); int readBytes = 0; while((readBytes = buf.read()) != -1) stream.write(readBytes); } catch (IOException ioe){ throw new ServletException(ioe.getMessage()); } finally { if(stream != null) stream.close(); if(buf != null) buf.close(); } } }
Configura en tu web.xml
<servlet> <servlet-name>Mp3Download</servlet-name> <servlet-class>com.web.mypackage.servlet.Mp3Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Mp3Download</servlet-name> <url-pattern>/test.mp3</url-pattern> </servlet-mapping>
* Como este ejemplo no usa el header de response Accept-Ranges , Si cancelas o cortas la conexión mientras te lo descargas no podrás reanudar la descarga desde el punto en que se cortó.
Ahora tu mp3 se puede bajar en desde tu navegador por ejemplo http://yourlocalhost:8080/Yourcontext/test.mp3, puedes descargarlo con un link html o usando un código javascript como el siguiente:
function downloadFile(){ input_box=confirm("Descargar MP3, ¿Estas seguro?" ); if (input_box==true){ window.location.href = 'test.mp3'; } }