954,574 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

How to save uploaded image in mysql using jsp?

my code :
********uploadImage.jsp*************

<form action="UploadImage" method="post" enctype="multipart/form-data" 
           name="productForm" id="productForm">
    <table width="400px" align="center" border=0 style="background-color:ffeeff;">
      <tr>
        <td align="center" colspan=2 style="font-weight:bold;font-size:20pt;">
           Image Details</td>


******UploadImage.java******

import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class UploadImage extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        System.out.println("request: " + request);
        if (!isMultipart) {
            System.out.println("File Not Uploaded");
        } else {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = null;

            try {
                items = upload.parseRequest(request);
                System.out.println("items: " + items);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            Iterator itr = items.iterator();
            while (itr.hasNext()) {
                FileItem item = (FileItem) itr.next();
                if (item.isFormField()) {
                    String name = item.getFieldName();
                    System.out.println("name: " + name);
                    String value = item.getString();
                    System.out.println("value: " + value);
                } else {
                    try {
                        String itemName = item.getName();
                        Random generator = new Random();
                        int r = Math.abs(generator.nextInt());

                        String reg = "[.*]";
                        String replacingtext = "";
                        System.out.println("Text before replacing is:-" + itemName);
                        Pattern pattern = Pattern.compile(reg);
                        Matcher matcher = pattern.matcher(itemName);
                        StringBuffer buffer = new StringBuffer();

                        while (matcher.find()) {
                            matcher.appendReplacement(buffer, replacingtext);
                        }
                        int IndexOf = itemName.indexOf(".");
                        String domainName = itemName.substring(IndexOf);
                        System.out.println("domainName: " + domainName);

                        String finalimage = buffer.toString() + "_" + r + domainName;
                        System.out.println("Final Image===" + finalimage);

                        File savedFile = new File("C:/apache-tomcat-6.0.16/webapps/example/" + "images\\" + finalimage);
                        item.write(savedFile);
                        out.println("<html>");
                        out.println("<body>");
                        out.println("<table><tr><td>");
                        out.println("<img src=images/" + finalimage + ">");
                        out.println("</td></tr></table>");

                        Connection conn = null;
                        String url = "jdbc:mysql://localhost:3306/";
                        String dbName = "thundercatz";
                        String driver = "com.mysql.jdbc.Driver";
                        String username = "root";
                        String userPassword = "";
                        String strQuery = null;
                        String strQuery1 = null;
                        String imgLen = "";

                        try {
                            System.out.println("itemName::::: " + itemName);
                            Class.forName(driver).newInstance();
                            conn = DriverManager.getConnection(url + dbName, username, userPassword);
                            Statement st = conn.createStatement();
                            strQuery = "insert into testimage values image='" + finalimage + "'";
                            int rs = st.executeUpdate(strQuery);
                            System.out.println("Query Executed Successfully++++++++++++++");
                            out.println("image inserted successfully");
                            out.println("</body>");
                            out.println("</html>");
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        } finally {
                            conn.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}


ERROR :
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
UploadImage.doPost(UploadImage.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
UploadImage.doPost(UploadImage.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

Include the jar that contains the class "org/apache/commons/io/output/DeferredFileOutputStream" in the WEB-INF/lib directory of your webapp.

masijade
Industrious Poster
Moderator
4,253 posts since Feb 2006
Reputation Points: 1,471
Solved Threads: 494
 

tq...but a blank page appears...

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

Okay? And what does the page source look like (from the browser View --> Source)? Post that here.

masijade
Industrious Poster
Moderator
4,253 posts since Feb 2006
Reputation Points: 1,471
Solved Threads: 494
 
<html>

<head><title>Image Upload</title></head>

<body>
  <form action="UploadImage" method="post" enctype="multipart/form-data" 
           name="productForm" id="productForm">
    <table width="400px" align="center" border=0 style="background-color:ffeeff;">
      <tr>
        <td align="center" colspan=2 style="font-weight:bold;font-size:20pt;">
           Image Details</td>
      </tr>

      <tr>
        <td align="center" colspan=2>&nbsp;</td>
      </tr>

      <tr>
        <td>Image Link: </td>
        <td>
          <input type="file" name="file" id="file">
        <td>
      </tr>

      <tr>
        <td></td>
        <td><input type="submit" name="Submit" value="Submit"></td>
      </tr>
      <tr>
        <td colspan="2">&nbsp;</td>
      </tr>

    </table>
  </form>
</body>

</html>


did u mean this???

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

Well, that should definately not produce a blank page (unless, maybe, you really are missing that opening "less than" sign). I meant the HTML source of the "blank page" you're talking about.

masijade
Industrious Poster
Moderator
4,253 posts since Feb 2006
Reputation Points: 1,471
Solved Threads: 494
 

actually the blank page appears because the image did not save in the database. ..:(

the page is:

import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class UploadImage extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        System.out.println("request: " + request);
        if (!isMultipart) {
            System.out.println("File Not Uploaded");
        } else {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = null;

            try {
                items = upload.parseRequest(request);
                System.out.println("items: " + items);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            Iterator itr = items.iterator();
            while (itr.hasNext()) {
                FileItem item = (FileItem) itr.next();
                if (item.isFormField()) {
                    String name = item.getFieldName();
                    System.out.println("name: " + name);
                    String value = item.getString();
                    System.out.println("value: " + value);
                } else {
                    try {
                        String itemName = item.getName();
                        Random generator = new Random();
                        int r = Math.abs(generator.nextInt());

                        String reg = "[.*]";
                        String replacingtext = "";
                        System.out.println("Text before replacing is:-" + itemName);
                        Pattern pattern = Pattern.compile(reg);
                        Matcher matcher = pattern.matcher(itemName);
                        StringBuffer buffer = new StringBuffer();

                        while (matcher.find()) {
                            matcher.appendReplacement(buffer, replacingtext);
                        }
                        int IndexOf = itemName.indexOf(".");
                        String domainName = itemName.substring(IndexOf);
                        System.out.println("domainName: " + domainName);

                        String finalimage = buffer.toString() + "_" + r + domainName;
                        System.out.println("Final Image===" + finalimage);

                        File savedFile = new File("C:/apache-tomcat-6.0.16/webapps/example/" + "images\\" + finalimage);
                        item.write(savedFile);
                        out.println("<html>");
                        out.println("<body>");
                        out.println("<table><tr><td>");
                        out.println("<img src=images/" + finalimage + ">");
                        out.println("</td></tr></table>");

                        Connection conn = null;
                        String url = "jdbc:mysql://localhost:3306/";
                        String dbName = "thundercatz";
                        String driver = "com.mysql.jdbc.Driver";
                        String username = "root";
                        String userPassword = "";
                        String strQuery = null;
                        String strQuery1 = null;
                        String imgLen = "";

                        try {
                            System.out.println("itemName::::: " + itemName);
                            Class.forName(driver).newInstance();
                            conn = DriverManager.getConnection(url + dbName, username, userPassword);
                            Statement st = conn.createStatement();
                            strQuery = "insert into testimage values image='" + finalimage + "'";
                            
                            int rs = st.executeUpdate(strQuery);
                            System.out.println("Query Executed Successfully++++++++++++++");
                            out.println("image inserted successfully");
                            out.println("</body>");
                            out.println("</html>");
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        } finally {
                            conn.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

i think it must be something wrong here.but they are no error..
it makes me going crazy

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

Actually, there probably are errors, but they are being printed to STDERR

} catch (Exception e) {
    e.printStackTrace();
}

So you need to search your server logfiles.

masijade
Industrious Poster
Moderator
4,253 posts since Feb 2006
Reputation Points: 1,471
Solved Threads: 494
 

ooo..ok...
i try to find it...
tq sir
1

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

how to find to search server logfiles?
i have no idea...

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

TOMCAT_INSTALATION_DIRECTORY/logs

So if it is local it can be C:\Tomcat 6.0.18\logs or on hosted server just tomcat/logs

peter_budo
Code tags enforcer
Moderator
15,436 posts since Dec 2004
Reputation Points: 2,806
Solved Threads: 902
 

i dont understand....

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

What you do not understand? Explain, I'm not mind reader to find out where you failing.

peter_budo
Code tags enforcer
Moderator
15,436 posts since Dec 2004
Reputation Points: 2,806
Solved Threads: 902
 

Did you copy a commons-fileupload-1.0.jar into lib folder of your application under WEB-INF?

>What is the datatype of image field?

__avd
Posting Genius (adatapost)
Moderator
8,648 posts since Oct 2008
Reputation Points: 2,136
Solved Threads: 1,241
 

hi...i have this code.
but i will display blank page when i run it :

import java.io.*;
import java.sql.*;
import java.util.*;
import java.text.*;
import java.util.regex.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class UploadImage extends HttpServlet{
  public void doPost(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    System.out.println("request: "+request);
    if (!isMultipart) {
      System.out.println("File Not Uploaded");
    } else {
      FileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
      List items = null;

      try {
        items = upload.parseRequest(request);
        System.out.println("items: "+items);
      } catch (FileUploadException e) {
        e.printStackTrace();
      }
      Iterator itr = items.iterator();
      while (itr.hasNext()) {
        FileItem item = (FileItem) itr.next();
        if (item.isFormField()){
          String name = item.getFieldName();
          System.out.println("name: "+name);
          String value = item.getString();
          System.out.println("value: "+value);
        } else {
          try {
            String itemName = item.getName();
            Random generator = new Random();
            int r = Math.abs(generator.nextInt());

            String reg = "[.*]";
            String replacingtext = "";
            System.out.println("Text before replacing is:-" + itemName);
            Pattern pattern = Pattern.compile(reg);
            Matcher matcher = pattern.matcher(itemName);
            StringBuffer buffer = new StringBuffer();

            while (matcher.find()) {
              matcher.appendReplacement(buffer, replacingtext);
            }
            int IndexOf = itemName.indexOf("."); 
            String domainName = itemName.substring(IndexOf);
            System.out.println("domainName: "+domainName);

            String finalimage = buffer.toString()+"_"+r+domainName;
            System.out.println("Final Image==="+finalimage);

            File savedFile = new File("C:/apache-tomcat-6.0.16/webapps/example/"+"images\\"+finalimage);
            item.write(savedFile);
            out.println("<html>");
            out.println("<body>");
            out.println("<table><tr><td>");
            out.println("<img src=images/"+finalimage+">");
            out.println("</td></tr></table>");

            Connection conn = null;
            String url = "jdbc:mysql://localhost/thundercatz";
            String dbName = "test";
            String driver = "com.mysql.jdbc.Driver";
            String username = "root"; 
            String userPassword = "";
            String strQuery = null;
          //  String strQuery1 = null;
            //String imgLen="";

            try {
              System.out.println("itemName::::: "+itemName);
              Class.forName(driver).newInstance();
              conn = DriverManager.getConnection(url+dbName,username,userPassword);
              Statement st = conn.createStatement();
              strQuery = "insert into testimage set image='"+finalimage+"'"; 
              int rs = st.executeUpdate(strQuery);
              System.out.println("Query Executed Successfully++++++++++++++");
              out.println("image inserted successfully");
              out.println("</body>");
              out.println("</html>");            
            } catch (Exception e) {
              System.out.println(e.getMessage());
            } finally {
              conn.close();
            }    
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    }
  }
}
farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

farahshafilla,

You already own a thread for the same question.
http://www.daniweb.com/forums/thread197747-2.html

Source code you posted here is a Servlet class. Please post jsp/html code and also write the name/version of your web server.

__avd
Posting Genius (adatapost)
Moderator
8,648 posts since Oct 2008
Reputation Points: 2,136
Solved Threads: 1,241
 

MERGED

@farahshafilla please read forum rules in regards of posting

peter_budo
Code tags enforcer
Moderator
15,436 posts since Dec 2004
Reputation Points: 2,806
Solved Threads: 902
 

farahshafilla,

You said that there is no output - nothing is to be displayed.
--- Use out.println() method instead of System.out.println()

Incorrect insert query statement:
INSERT INTO tablename VALUES ('A','B')

strQuery = "INSERT INTO testimage VALUES ('" + finalimage + "')";
  st.executeUpdate(strQuery);
  out.println("Query Executed Successfully++++++++++++++");
  out.println("image inserted successfully");
  out.println("</body>");
  out.println("</html>");            
      }
       catch (Exception e) {
              out.println(e.getMessage());
      } 
      finally {
              conn.close();
            }    
     }
    catch (Exception e) {
             out.println(e.getMessage());
     }
   ...
__avd
Posting Genius (adatapost)
Moderator
8,648 posts since Oct 2008
Reputation Points: 2,136
Solved Threads: 1,241
 

i already change the sql statement and also make out.println() method.
but it still display blank page when i run it

farahshafilla
Newbie Poster
19 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

Hi,

I want to know the name and version of your webserver.

OK! I have a sample program.

This is a .jsp
index.jsp

<html>
<head><title>Image Upload</title></head>
<% 
 // A message from servlet
 String msg=(String)request.getAttribute("message");
 if(msg==null) msg="";
%>
<body>
  <form action="UploadImage" method="post" enctype="multipart/form-data" 
           name="productForm" id="productForm">
    <table width="400px" align="center" border=0 style="background-color:ffeeff;">
      <tr>
        <td align="center" colspan=2 style="font-weight:bold;font-size:20pt;">
           Image Details</td>
      </tr>
      <tr>
        <td align="center" colspan=2>&nbsp;</td>
      </tr>
      <tr>
        <td>Image Link: </td>
        <td>
          <input type="file" name="file" id="file">
        <td>
      </tr>
      <tr>
        <td colspan="2">
            <%=msg%>
        <input type="submit" name="Submit" value="Submit"></td>
      </tr>
      <tr>
        <td colspan="2">&nbsp;</td>
      </tr>
    </table>
  </form>
</body>
</html>


and UploadImage servlet

package com.me;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;
import org.apache.tomcat.jni.Directory;

public class UploadImage extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       String message=""; 
       
       // Path,  where uploaded files are to be saved
       String uploaddir=getServletContext().getRealPath("/files");
       String filename="";
       Connection cn=null;
       PreparedStatement st=null;
      try{  
        org.apache.commons.fileupload.DiskFileUpload ds=new DiskFileUpload();
        
        // Parse the request
        List<FileItem> list=ds.parseRequest(request);
        Class.forName("com.mysql.jdbc.Driver");
        cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jaydb","root","root");
        
        // Loop to retrieve form's name-value
        for(FileItem a:list)
        {
            if(a.getContentType()!=null & a.getContentType().startsWith("image/"))
            {
             // Create a directory if it is not exist
             File f=new File(uploaddir);
             f.mkdir();
             // filename from the parsed request
             filename=a.getName();
             
             // Write a record - filename and filedata 
             //   CREATE TABLE `testimage` (
             //  `filename` varchar(100) collate latin1_general_ci NOT NULL,
             //  `filedata` blob NOT NULL
             // ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

             st=cn.prepareStatement("insert into testimage values (?,?)");
             st.setString(1, filename);
             st.setBlob(2,a.getInputStream());
             st.executeUpdate();
             st.close();
                         
             message=" File is uploaded, saved into disk and written into a db. ";
             
             // Save a file into /files folder
             String filePath=uploaddir + "/" + filename;
             FileOutputStream fs=new FileOutputStream(filePath);
             fs.write(a.get());
             fs.close();
            }    
        }
        cn.close();
      }catch(Exception ex)
      {
          request.setAttribute("message", ex.getMessage());
      }
        // Dispatch a request
        request.setAttribute("message",message);
        RequestDispatcher reqDisp=request.getRequestDispatcher("index.jsp");
        reqDisp.forward(request, response);
    }
}


I configured UploadImage servlet - Servlet Mapping
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>UploadImage</servlet-name>
        <servlet-class>com.me.UploadImage</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UploadImage</servlet-name>
        <url-pattern>/UploadImage</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
 </web-app>


and also copy these files -
commons-fileupload-1.0.jar and mysql-connector-java-5.1.5-bin.jar into WEB-INF/lib folder.

__avd
Posting Genius (adatapost)
Moderator
8,648 posts since Oct 2008
Reputation Points: 2,136
Solved Threads: 1,241
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You