0

I am uploading more images using single upload button such as below code,

Updated based on Answer :

 package TeachChapter;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.sql.*;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
/**
 * Servlet implementation class ImageUploadToDB
 */
@WebServlet("/ImageUploadToDB")
public class ImageUploadToDB extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ImageUploadToDB() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("Entered successfully:");
        final FileItemFactory factory = new DiskFileItemFactory();
        final ServletFileUpload fileUpload = new ServletFileUpload(factory);
        List items = null;
         Map<String, InputStream> fileMap = new HashMap<String, InputStream>();

        if (ServletFileUpload.isMultipartContent(request)) {

            // get the request content and iterate through
            try {
                items = fileUpload.parseRequest(request);
            } catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (items != null) {
                System.out.println("if0 successfully:");
                final Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    System.out.println("while successfully:");
                    final FileItem item = (FileItem) iter.next();
                    // this is for non-file fields
                    if (item.isFormField()) {
                        System.out.println("if1 successfully:");
                    // logic for setting non-file fields
                    } else {
                        // item.getName() - gives file name
                        fileMap.put(item.getName(), item.getInputStream());
                        System.out.println("else successfully:");
                    }
                }
            }
        }


        try {
            System.out.println("try connection successfully:");

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/raptor1_5","root","");

        Set<String> keySet = fileMap.keySet();
        for (String fileName : keySet) {
            System.out.println("for successfully:");
        String sql ="INSERT INTO contacts (first_name, last_name, photo) values (?, ?, ?)" ; 
        PreparedStatement statement;

            statement = con.prepareStatement(sql);

             statement.setString(1, "mani");  
             statement.setString(2, "vasu"); 

            statement.setBlob(3, fileMap.get(fileName));


            int row = statement.executeUpdate();
            System.out.println("inserted successfully:");
        }
        }
         catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("errror is:"+e);
        }  



    }
}

OP :

Entered successfully:
try connection successfully:

I know above code totally wrong but i want to get that all uploaded images in servlet page for insert into mysql.

Please Help me out.

MMMMS
  • 2,179
  • 9
  • 43
  • 83

1 Answers1

1

Had faced a similar issue - probably you could build upon it further.

This is a generic solution - where you don't know the number of attachments in the input request. It caters to a multi-part request as below.

// imports
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;

// code flow
// HttpServletRequest request
final FileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload fileUpload = new ServletFileUpload(factory);
List items = null;
private Map<String, InputStream> fileMap = new HashMap<String, InputStream>();

if (ServletFileUpload.isMultipartContent(request)) {

    // get the request content and iterate through
    items = fileUpload.parseRequest(request);

    if (items != null) {
        final Iterator iter = items.iterator();
        while (iter.hasNext()) {
            final FileItem item = (FileItem) iter.next();
            // this is for non-file fields
            if (item.isFormField()) {

            // logic for setting non-file fields
            } else {
                // item.getName() - gives file name
                fileMap.put(item.getName(), item.getInputStream());
            }
        }
    }
}

//Here i will insert that images on by one to DB
Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/raptor1_5","root","");

Set<String> keySet = fileMap.keySet();
for (String fileName : keySet) {

String sql = "INSERT INTO contacts (photo) values (?)";  
PreparedStatement statement = con.prepareStatement(sql);  
statement.setBlob(1, fileMap.get(fileName));  
int row = statement.executeUpdate();  
}

fileMap will contain all the files you have sent in the request.

If you don't bother for file names, you can change the implementation from HashMap to ArrayList and modify the for loop accordingly.

Pramod Karandikar
  • 5,289
  • 7
  • 43
  • 68