使用Java Servlet从数据库上传和下载文件
发布时间:2023-04-01 11:15:53 所属栏目:教程 来源:
导读:在本文档中,我将指导您上载文件并将其存储在数据库中数据类型为BLOB的列中,然后从数据库中数据类型为BLOB的列中下载文件。
创建数据库
您可以使用任何数据库,下面是用于创建upload表的脚本,该表用于存储您
创建数据库
您可以使用任何数据库,下面是用于创建upload表的脚本,该表用于存储您
|
在本文档中,我将指导您上载文件并将其存储在数据库中数据类型为BLOB的列中,然后从数据库中数据类型为BLOB的列中下载文件。 创建数据库 您可以使用任何数据库,下面是用于创建upload表的脚本,该表用于存储您上载的数据文件。 CREATE TABLE `upload` ( `id` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_unicode_ci',`file` LONGBLOB NOT NULL,`filename` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8mb4_unicode_ci',PRIMARY KEY (`id`) USING BTREE ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB ; 上传文件并存储在数据库中 fileupload.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=UTF-8"%> <% request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <title>文件上传到数据库</title> <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="POST" action="FileUpload" enctype="multipart/form-data" > <table> <tr><td>Id</td> <td><input type="text" name="id" /></td> <tr> <td>File</td> <td><input type="file" name="file" id="file" /> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="Upload" name="upload" id="upload" /> </td> </tr> </table> </form> </body> </html> FileUpload.java //中文 import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.sqlException; import java.sql.Statement; import javax.servlet.servletexception; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/FileUpload") @MultipartConfig public class FileUpload extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request,HttpServletResponse response)throws servletexception,IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); final Part filePart = request.getPart("file"); String id = request.getParameter("id"); InputStream FileBytes = null; final PrintWriter writer = response.getWriter(); try { //if (!filePart.getContentType().equals("image/jpeg")) // { // writer.println("<br/> Invalid File"); // return; // } // else if (filePart.getSize()>1048576 ) { //2mb // { // writer.println("<br/> File size too big"); // return; // } // } String filename = filePart.getSubmittedFileName(); FileBytes = filePart.getInputStream(); // to get the body of the request as binary data final byte[] bytes = new byte[FileBytes.available()]; FileBytes.read(bytes); //Storing the binary data in bytes array. Connection con=null; Statement stmt=null; try { Class.forName("com.MysqL.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:MysqL://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC","root","root"); } catch (Exception e) { System.out.println(e); System.exit(0); } int success=0; PreparedStatement pstmt = con.prepareStatement("INSERT INTO upload VALUES(?,?,?)"); pstmt.setString(1,id); pstmt.setBytes(2,bytes); //Storing binary data in blob field. pstmt.setString(3,filename); //Storing binary data in blob field. success = pstmt.executeUpdate(); if(success>=1) System.out.println("Data Stored"); con.close(); writer.println("<br/> Book Successfully Stored"); } catch (FileNotFoundException fnf) { writer.println("You did not specify a file to upload"); writer.println("<br/> ERROR: " + fnf.getMessage()); } catch (sqlException e) { // Todo Auto-generated catch block e.printstacktrace(); } finally { if (FileBytes != null) { FileBytes.close(); } if (writer != null) { writer.close(); } } } } 使用Stream //中文 import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.sqlException; import java.sql.Statement; import javax.servlet.servletexception; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/FileUpload") @MultipartConfig public class FileUpload extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request,HttpServletResponse response) throws servletexception,IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); final Part filePart = request.getPart("file"); String id = request.getParameter("id"); InputStream FileBytes = null; final PrintWriter writer = response.getWriter(); Connection con = null; Statement stmt = null; try { //if (!filePart.getContentType().equals("image/jpeg")) // { // writer.println("<br/> Invalid File"); // return; // } // else if (filePart.getSize()>1048576 ) { //2mb // { // writer.println("<br/> File size too big"); // return; // } // } String filename = filePart.getSubmittedFileName(); FileBytes = filePart.getInputStream(); // to get the body of the request as binary data try { Class.forName("com.MysqL.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:MysqL://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC","root"); } catch (Exception e) { System.out.println(e); System.exit(0); } int success = 0; PreparedStatement pstmt = con.prepareStatement("INSERT INTO upload VALUES(?,?)"); pstmt.setString(1,id); pstmt.setBinaryStream(2,FileBytes); //Storing binary data in blob field. pstmt.setString(3,filename); //Storing binary data in blob field. success = pstmt.executeUpdate(); if (success >= 1) System.out.println("Data Stored"); con.close(); writer.println("<br/> File Successfully Uploaded"); } catch (FileNotFoundException fnf) { writer.println("You did not specify a file to upload"); writer.println("<br/> ERROR: " + fnf.getMessage()); } catch (sqlException e) { // Todo Auto-generated catch block e.printstacktrace(); } finally { if (con != null) { // closes the database connection try { con.close(); } catch (sqlException ex) { ex.printstacktrace(); } } if (FileBytes != null) { FileBytes.close(); } if (writer != null) { writer.close(); } } } } 从数据库中下载文件 download.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=UTF-8"%> <% request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); %> <!DOCTYPE html> <html> <head> <Meta charset="ISO-8859-1"> <title>从数据库下载文件</title> </head> <body> <form action="DBFileDownload" method="get"> <input type="text" name="id"> <input type="submit" value="getfile"> </form> </body> </html> DBFileDownloadServlet.java //中文 import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.sqlException; import javax.servlet.servletexception; import javax.servlet.ServletoutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; /** * Servlet implementation class GetDetails */ @WebServlet("/DBFileDownload") public class DBFileDownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request,IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); String id = request.getParameter("id")!=null?request.getParameter("id"):"NA"; ServletoutputStream sos; Connection con=null; PreparedStatement pstmt=null; sos = response.getoutputStream(); try { Class.forName("com.MysqL.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:MysqL://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC","root"); } catch (Exception e) { System.out.println(e); System.exit(0); } ResultSet rset=null; try { pstmt = con.prepareStatement("Select file,filename from upload where id=?"); System.out.println("Select file,filename from upload where id="+id.trim()); pstmt.setString(1,id.trim()); rset = pstmt.executeQuery(); if (rset.next()) { response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-disposition","inline; filename*=UTF-8''" + URLEncoder.encode(rset.getString("filename"),"UTF-8")); sos.write(rset.getBytes("file")); System.out.println(rset.getBytes("file")); System.out.println(rset.getString("filename")); } else return; } catch (sqlException e) { // Todo Auto-generated catch block e.printstacktrace(); } sos.flush(); sos.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response) */ protected void doPost(HttpServletRequest request,IOException { // Todo Auto-generated method stub } } 使用Stream //中文 import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.sqlException; import java.sql.Statement; import javax.servlet.servletexception; import javax.servlet.ServletoutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; import java.io.InputStream; /** * Servlet implementation class GetDetails */ @WebServlet("/DBFileDownload") public class DBFileDownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request,IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); String id = request.getParameter("id") != null ? request.getParameter("id") : "NA"; ServletoutputStream sos; Connection con = null; PreparedStatement pstmt = null; sos = response.getoutputStream(); ResultSet rset = null; try { try { Class.forName("com.MysqL.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:MysqL://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC","root"); } catch (Exception e) { System.out.println(e); System.exit(0); } pstmt = con.prepareStatement("Select file,filename from upload where id=?"); System.out.println("Select file,filename from upload where id=" + id.trim()); pstmt.setString(1,id.trim()); rset = pstmt.executeQuery(); if (rset.next()) { response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-disposition","UTF-8")); InputStream inputStream = rset.getBinaryStream("file"); int i; while ((i = inputStream.read()) != -1) { sos.write(i); } System.out.println(rset.getBytes("file")); System.out.println(rset.getString("filename")); } else return; } catch (sqlException e) { // Todo Auto-generated catch block e.printstacktrace(); } finally { if (con != null) { // closes the database connection try { con.close(); } catch (sqlException ex) { ex.printstacktrace(); } } } sos.flush(); sos.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request,IOException { // Todo Auto-generated method stub } } 使用Stream消耗内存少于使用字节数组。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
