Collected From: http://sheikyerbouti.developpez.com/uploadfiles/uploadfiles.htm
MultipartRequest.java
That allows the JSP page to call the Java class.
The SELECT statement is used to lock the corresponding row, then update the BLOB content.
(In this example, the id transmitted is hard-coded (id=1) but in the real world, the ID would be dynamically set)
The INSERT statement is used to create the row if it does not exist.
The sDataSource variable contains the JDBC connection string.
The sReturnUrl variable contains the url to return after the uploading, so to re-display the main page.
The log is set to true to display some trace information in the console.
A file filter can be provided to validate the allowed file types.
1. Introduction
Here is a solution that explains how you can
upload local documents onto the database.
It uses a JSP page, two Java classes, and of course, a JDBC connection.
It allows to store any document taken from the client machine to any column of any database table.
In this sample, we are supposed to store a file in a BLOB column.
It uses a JSP page, two Java classes, and of course, a JDBC connection.
It allows to store any document taken from the client machine to any column of any database table.
In this sample, we are supposed to store a file in a BLOB column.
2. The JSP page
uploadDocument.jsp
This is the JSP page that receives the required parameters from the calling application:
This is the JSP page that receives the required parameters from the calling application:
- the necessary SQL orders to query and update the corresponding database table.
- the datasource name to connect through the JDBC driver.
- the return url to re-display the calling page.
- a non-mandatory comma delimited string that contains the list of the allowed extensions (e.g. ".gif,.jpg")
<%String path = request.getContextPath();%>
<html> <head> <title>Attach documents</title> <% String sUrlBack = ""; // return Url String sInsert = ""; // Insert order String sSelect = ""; // Select order String sFilter = ""; // file filter String sDSource = ""; // data-source name String sLog = ""; // enable log // read the parameters sSelect = request.getParameter("select") != null ? request.getParameter("select") : "" ; sInsert = request.getParameter("select") != null ? request.getParameter("insert") : "" ; sFilter = request.getParameter("filter") != null ? request.getParameter("filter") : "" ; sUrlBack = request.getParameter("urlback") ! = null ? request.getParameter("urlback") : "" ; sDSource = request.getParameter("datasource") != null ? request.getParameter("datasource") : "" ; sLog = request.getParameter("log") != null ? request.getParameter("log") : "" ; // set parameters in memory session.setAttribute("select", sSelect); session.setAttribute("insert", sInsert); session.setAttribute("urlRedirect", sUrlBack); session.setAttribute("datasource", sDSource); session.setAttribute("log", sLog); %> <script language="JavaScript"> function checkParams() { var filename = document.Upload.file.value ; var filtre = "<%=sFilter%>" var ext = filename.substring(filename.lastIndexOf(".")); //checkparameters if("<%=sSelect%>"== '') { alert("SELECT order missing"); return false; } if("<%=sInsert%>"=='') { alert("INSERT order missing"); return false; } if (filename=='') { alert("Filename must be given"); document.Upload.file.focus(); } else // check filename extensions if(filtre != "" && filtre.indexOf(ext)==-1) { alert("Extension must be in: "+filtre); document.Upload.file.focus(); } else { document.Upload.submit(); } } </script> </head> <body> <form name= "Upload"action="<%=path%>/UploadFiles" method="post" enctype="multipart/form-data"> <table cellspacing=0 width="200" border=1> <tr><td> <table cellspacing=0 width="200" border=0> <tr> <td height="24">File name</td> <td><input type="file" name="file" size="40"></td> </tr> <tr></tr> <tr align=center><td colspan=2> <input type=button value="Close" onclick="javascript:self.close();"> <input type=button value="Attach file" onclick="javascript:checkParams();"> </td></tr> </table> </td></tr> </table> </form> </body> </html> |
The forms’s action (colorized in blue) is to call the UploadFiles Java class with the corresponding parameters.
A javascript function (checkParams()) is used to check that the mandatory parameters have been provided (SQL orders and filename), and the file selected has an allowed extension (if a filter has been provided).
3. The Java classes
UploadFiles.java
This class extends HttpServlet and allows to get the file to read.
It is called by the calling jsp that transmits the required parameters:
- Select and Insert SQL orders and the JDBC connection string.
This class extends HttpServlet and allows to get the file to read.
It is called by the calling jsp that transmits the required parameters:
- Select and Insert SQL orders and the JDBC connection string.
package util.upload; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class UploadFiles extends HttpServlet { private String urlRedirect = ""; public void init(ServletConfig config) throws ServletException { super.init(config); } public void doPost(HttpServletRequest pRequest, HttpServletResponse pReponse) throws ServletException, IOException { MultipartRequest multi = null; try { urlRedirect = (String)pRequest.getSession(false).getAttribute("urlRedirect"); multi = new MultipartRequest(pRequest); } catch (IOException e) { System.err.println("ERROR UploadFiles :" + e.getMessage()); e.printStackTrace(); } catch (Exception e) { System.err.println("ERROR UploadFiles :" + e.getMessage()); e.printStackTrace(); } finally { System.out.println("urlRedirect="+urlRedirect); redirect(pReponse,urlRedirect); } } private void redirect (HttpServletResponse pReponse,String pURL) { try { pReponse.sendRedirect(pReponse.encodeRedirectUrl(pURL)); } catch (IOException i) { System.err.println("ERROR UploadFiles :" + i.getMessage()); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>Servlet1</title></head>"); out.println("<body>"); out.println("<p>The servlet has received a GET. This is the reply.</p>"); out.println("</body></html>"); out.close(); } private static final String CONTENT_TYPE = "text/html; charset=ISO-8859-1"; } |
MultipartRequest.java
This class gets the file stream then write the content into the provided
database column.
4. The web.xml content
<?xml version = '1.0' encoding =
'windows-1252'?>
<web-app> <description>UploadFile web.xml file</description> <session-config> <session-timeout>35</session-timeout> </session-config> <servlet> <servlet-name>UploadFiles</servlet-name> <servlet-class>util.upload.UploadFiles</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadFiles</servlet-name> <url-pattern>/UploadFiles</url-pattern> </servlet-mapping> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>txt</extension> <mime-type>text/plain</mime-type> </mime-mapping> </web-app> |
That allows the JSP page to call the Java class.
5. The sample JSP test page
the go.jsp
page is provided to test the solution.
<%@pagecontentType="text/html;charset=windows-1252"%>
<% String sPath = request.getContextPath() ; String sSelect = "select doc from BINARY_FILES where id=1 for update " ; String sInsert = "insert into binary_files (id,name,mimetype,doc) values(seq_binary_files.nextval,'doc','image/jpeg',empty_blob()) " ; String sDataSource = "jdbc:oracle:thin:test/test@localhost:1521:XE" ; String sReturnUrl = sPath + "/uploadDocument.jsp" ; %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>untitled</title> </head> <body> <table> <tr> <td> <!-- call the uploadDocument JSP page --> <!-- with the corresponding parameters --> <ahref="<%=sReturnUrl%>?insert=<%=sInsert%>&select=<%=sSelect%>&urlback=<%=sReturnUrl%> &datasource=<%=sDataSource%>&log=true">file attachment</a> </td> <tr> </table> </body> </html> |
The SELECT statement is used to lock the corresponding row, then update the BLOB content.
(In this example, the id transmitted is hard-coded (id=1) but in the real world, the ID would be dynamically set)
The INSERT statement is used to create the row if it does not exist.
The sDataSource variable contains the JDBC connection string.
The sReturnUrl variable contains the url to return after the uploading, so to re-display the main page.
The log is set to true to display some trace information in the console.
A file filter can be provided to validate the allowed file types.
6. The sample table creation script
create table binary_files ( id number(5) primary key ,name varchar2(128) ,mimetype varchar2(30) ,doc blob ) / create sequence seq_binary_files start with 1 / |
0 comments:
Post a Comment