package com.dinesh.admin; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") @WebServlet("/download") public class FileDownload extends HttpServlet { private static final int BUFFER_SIZE = 4096; private String dbURL = "jdbc:oracle:thin:@localhost:1521:xe"; private String dbUser = "system"; private String dbPass = "system"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String BOOKID = "BOOKID"; Connection conn = null; System.out.println("-------------Connection"); try { System.out.println("-------------try Block"); DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); conn = DriverManager.getConnection(dbURL, dbUser, dbPass); PreparedStatement statement = conn.prepareStatement("SELECT bookId,bookConent,bookTitle from book where BOOKID='?'"); statement.setString(1, BOOKID); System.out.println("-------------result:1"); ResultSet result = statement.executeQuery(); if (result.next()) { // gets file name and file blob data Blob lob =null; lob = result.getBlob("BOOKCONTENT"); InputStream inputStream = lob.getBinaryStream(); int fileLength = inputStream.available(); /*System.out.println("fileLength = " +fileLength);*/ ServletContext context = getServletContext(); String BOOKTITLE = result.getString("BOOKTITLE"); String mimeType = context.getMimeType(BOOKTITLE); if (mimeType == null) { mimeType = "application/octet-stream"; } response.setContentType(mimeType); response.setContentLength(fileLength); String headerKey = "Content-Disposition"; String headerValue = String.format("BOOKCONENT; BOOKTITLE=\"%s\"", BOOKTITLE); response.setHeader(headerKey, headerValue); // writes the file to the client OutputStream outStream = response.getOutputStream(); byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1){ outStream.write(buffer, 0, bytesRead); } inputStream.close(); outStream.close(); } else { // no file found response.getWriter().print("File not found for the id: " + BOOKID); } } catch (SQLException ex) { ex.printStackTrace(); response.getWriter().print("SQL Error: " + ex.getMessage()); System.out.println("-------------catch"); } catch (IOException ex) { ex.printStackTrace(); response.getWriter().print("IO Error: " + ex.getMessage()); } finally { if (conn != null) { // closes the database connection try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } } } } } | 0 |