開啓數據庫連接,下載BLOG讀取爲文件


public class FilesDownload extends HttpServlet {
	private static final long serialVersionUID = -6849794470754667710L;
	private static Log log = LogFactory.getLog(FilesDownload.class);

	/**
	 * Constructor of the object.
	 */
	public FilesDownload() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	@SuppressWarnings({ "deprecation", "unchecked" })
	public void doGet(HttpServletRequest request, HttpServletResponse response) {
		try {
			String title;
			title = request.getParameter("subject");
			String method = request.getParameter("method");
			if ("download".equals(method)) {
				download(request, response);
			} else if ("downloadall".equals(method)) {
				downloadAll(request, response, title);
			}
		} catch (SQLException e) {
			log.error("");
		}

	}

	/**
	 * The doPost method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to
	 * post.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) {

		response.setContentType("text/html");
		PrintWriter out = null;
		try {
			out = response.getWriter();
			out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
			out.println("<HTML>");
			out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
			out.println("  <BODY>");
			out.print("    This is ");
			out.print(this.getClass());
			out.println(", using the POST method");
			out.println("  </BODY>");
			out.println("</HTML>");
			out.flush();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			log.error(e);
		} finally {
			if (out != null)
				out.close();
		}
	}

	/**
	 * Initialization of the servlet. <br>
	 * 
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() {
		// Put your code here
	}

	// private void zipFile(FileElement element, OutputStream fw,
	// ZipOutputStream zos) {
	// if (element.getFileID() != null) {
	//
	// // zos.setEncoding("GBK");
	// FileInputStream fis = null;
	// try {
	// zos.putNextEntry(new ZipEntry(element.getFileName()));
	// fis = (FileInputStream) element.getInputStreamDirect();
	// byte[] buffer = new byte[1024];
	// int r = 0;
	// while ((r = fis.read(buffer)) != -1) {
	// zos.write(buffer, 0, r);
	// }
	// } catch (IOException e) {
	// // TODO Auto-generated catch block
	// log.error(e);
	// } finally {
	// try {
	// if (fis != null)
	// fis.close();
	// if (zos != null)
	// zos.closeEntry();
	// } catch (IOException e) {
	// // TODO Auto-generated catch block
	// log.error(e);
	// }
	// }
	// }
	// }

	private void download(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws SQLException {
		DataSource dataSource = DataSourceFactory.defaultFactory.getDataSource("dataSource");
		Connection conn = null;
		// Statement stmt=null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String down_id = "";
		String down_id_string = paramHttpServletRequest.getParameter("uuid");
		if (down_id_string == null) {
			throw new SystemException("no file exists");
		} else {
			down_id = down_id_string; // 獲得下載的文件id
		}
		String sql = "select FILE_NAME,FILE_CONTENT  from DM_EDOC_BASE_FILE  where id= ?";
		try {
			conn = dataSource.getConnection();
			conn.setAutoCommit(false);
			ps = conn.prepareStatement(sql);
			ps.setString(1, down_id);
			// stmt = conn.createStatement();
			// rs = stmt.executeQuery(sql);
			rs = ps.executeQuery();
			if (rs != null) {
				if (rs.next()) {

					paramHttpServletResponse.setHeader("Content-Disposition",
							"attachment;filename=" + URLEncoder.encode(rs.getString("file_name"), "UTF-8"));
					paramHttpServletResponse.setHeader("Connection", "close");
					paramHttpServletResponse.setHeader("Content-Type", "application/octet-stream");

					ServletOutputStream sout = paramHttpServletResponse.getOutputStream();
					InputStream in = rs.getBinaryStream("file_content");
					byte b[] = new byte[1024 * 8];
					for (int i = in.read(b); i != -1;) {
						sout.write(b);
						i = in.read(b);
					}
					sout.flush();
					sout.close();
					in.close();
				}
			}
		} catch (SQLException e) {
			log.error("執行sql報錯:" + e);
			throw new SystemException("執行查詢報錯");
		} catch (Exception e) {
			if (log.isDebugEnabled()) {
				log.debug(e);
			}
		} finally {
			try {
				// if (rs.isClosed()) {
				rs.close();
				// }
			} catch (SQLException e) {
				if (log.isErrorEnabled()) {
					log.error(EdocDownload.class + "關閉結果集時報錯", e);
				}
			}
			try {
				if (null != ps) {
					ps.close();
				}
			} catch (SQLException e) {
				if (log.isErrorEnabled()) {
					log.error(EdocDownload.class + "關閉SQL執行器時報錯", e);
				}
			}
			try {
				if (null != conn) {
					conn.close();
				}
			} catch (SQLException e) {
				if (log.isErrorEnabled()) {
					log.error(EdocDownload.class + "關閉連接對象時報錯", e);
				}
			}
		}

	}

	private void downloadAll(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, String title) {
		String str1 = paramHttpServletRequest.getParameter("uuids");
		if (str1 == null)
			throw new SystemException("uuids error");
		ServletOutputStream localServletOutputStream = null;
		try {
			localServletOutputStream = paramHttpServletResponse.getOutputStream();
			List localList = StringUtil.split(str1, ",");
			if (localList.size() == 0)
				localServletOutputStream.close();
			String str2 = "attachment;filename=\"" + URLEncoder.encode(title, "UTF-8") + ".zip\"";
			paramHttpServletResponse.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");
			paramHttpServletResponse.setHeader("Content-disposition", str2);
			FileFactory.getCompressedArchive(localList, localServletOutputStream);
		} catch (IOException localIOException1) {
			log.error(localIOException1);
			try {
				if (localServletOutputStream != null)
					localServletOutputStream.close();
			} catch (IOException localIOException2) {
				log.error(localIOException2);
			}
		} catch (CMException localCMException) {
			log.error(localCMException);
			try {
				if (localServletOutputStream != null)
					localServletOutputStream.close();
			} catch (IOException localIOException3) {
				log.error(localIOException3);
			}
		} finally {
			try {
				if (localServletOutputStream != null)
					localServletOutputStream.close();
			} catch (IOException localIOException4) {
				log.error(localIOException4);
			}
		}
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章