package org.ariadne_eu.servlets; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import javax.activation.DataHandler; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.ariadne_eu.content.retrieve.RetrieveContentFactory; import org.ariadne_eu.utils.Utilities; public class DownloadResourceServlet extends HttpServlet { private Logger log = Logger.getLogger(DownloadResourceServlet.class); public DownloadResourceServlet() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String identifier = Utilities.escape(request.getParameter("objectid")); try { String mimetype = "application/octet-stream"; log.info("Downloading object: " + identifier); DataHandler dataHandler = RetrieveContentFactory.retrieveContent(identifier); String fileName = RetrieveContentFactory.retrieveFileName(identifier); log.info("Datahandler is: " + dataHandler ); response.setContentType(mimetype); response.setHeader("Content-Disposition", "attachment; filename=" + fileName.replaceAll(" ", "_")); final BufferedInputStream input = new BufferedInputStream(dataHandler.getInputStream()); final BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); final int BUFFER_SIZE = 1024 * 4; final byte[] buffer = new byte[BUFFER_SIZE]; while (true) { final int count = input.read(buffer, 0, BUFFER_SIZE); if (-1 == count) { break; } output.write(buffer, 0, count); } output.flush(); dataHandler.getInputStream().close(); } catch (Exception ex) { ex.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void init(ServletConfig config) throws ServletException { super.init(config); } }