Many times it may be a requirement to send a file from a server to a user as a download which can be saved on the users machine. To send a file as a download to a user all you need is a Servlet and the file which will be sent to the user. Below is a sample code for the Servlet which will send a file as a download.
private static javax.servlet.ServletConfig config; /* (non-Javadoc) * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig) */ @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub super.init(config); FileDownloadServ.config = config; } private void sendFile(String fileName, HttpServletRequest request, HttpServletResponse response) { java.io.File f = null; String file; file = FileDownloadServ.config.getServletContext().getRealPath("/" + fileName); f = new java.io.File(file); int length = 0; javax.servlet.ServletOutputStream op=null; try { op = response.getOutputStream(); } catch(java.io.IOException ex) { System.out.println("IOException while opening the output stream\n"+ex); } javax.servlet.ServletContext context = getServletConfig().getServletContext(); String mimetype = "application/octet-stream"; response.setContentType(mimetype); response.setContentLength( (int)f.length() ); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"" ); // // Stream to the requester. // byte[] bbuf = new byte[1024]; try { java.io.DataInputStream in = new java.io.DataInputStream(new java.io.FileInputStream(f)); while ((in != null) && ((length = in.read(bbuf)) != -1)) { op.write(bbuf,0,length); } in.close(); op.flush(); op.close(); } catch(java.io.IOException ex) { System.out.println("IOException while reading file!\n"+ex); } }
The above method when called from a Servlet's doPost() or doGet() with fileName as parameter will sent the file to the user.
0 comments:
Post a Comment