I want to upload multiple images into server folder using jsp and servlet
I can upload single image but i am unable to upload multiple images
Please help me
Try bellow code (Apache commons file upload)
index.jsp
<html>
<head><title>Upload page</title></head><body>
<form action="UploadServlet" method="post" enctype="multipart/form-data" name="form1" id="form1">
<center>
<table border="1">
<tr>
<td align="center"><b>Multipale file Uploade</td>
</tr>
<tr>
<td>
Select file: <input name="file" type="file" id="file">
</td>
</tr>
<tr>
<td>
Select file:<input name="file" type="file" id="file">
</td>
<tr>
<td>
Select file:<input name="file" type="file" id="file">
</td>
</tr>
<tr>
<td align="center">
<input type="submit" name="Submit" value="Submit files"/>
</td>
</tr>
</table>
<center>
</form>
</body>
</html>
Or You can also use below code for jsp (if you are using this code press ctrl to select multiple images)
<html>
<head><title>Upload page</title></head><body>
<form action="UploadServlet" method="post" enctype="multipart/form-data" name="form1" id="form1">
<center>
<table border="1">
<tr>
<td align="center"><b>Multipale file Uploade</td>
</tr>
<tr>
<td>
Specify file: <input name="file" type="file" id="file" multiple>
</td>
</tr>
<tr>
<td align="center">
<input type="submit" name="Submit" value="Submit files"/>
</td>
</tr>
</table>
<center>
</form>
</body>
</html>
And UploadServlet.java
package com;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
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.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
} else {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {
} else {
try {
String itemName = item.getName();
File savedFile = new File("D:\\"+itemName);
item.write(savedFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
Hope this helps!!!
Here is the sample code:
Coding for uploadform.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Image Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
<table width="400px" align="center" border=0>
<tr>
<td align="center" colspan=2>
Image Details</td>
</tr>
<tr>
<td>First Name </td>
<td>
<input type="input" name="firstname">
</td>
</tr>
<tr>
<td>Last Name </td>
<td>
<input type="input" name="lastname">
</td>
</tr>
<tr>
<td>Image Link: </td>
<td>
<input type="file" name="file">
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>
You need to set enctype of form tag to "multipart/form-data" it tells that form contain multipart data.
This page contain two text fields for first name and last name and one file type field for files, after submitting the form data send to FileUploadServlet servlet where all other processing is to be done.
Coding for FileUploadServlet.java:
import java.io.PrintWriter;
import java.sql.*;
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("/FileUploadServlet")
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
maxFileSize=1024*1024*10, // 10MB
maxRequestSize=1024*1024*50)
public class FileUploadServlet extends HttpServlet {
private static final String SAVE_DIR="images";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, ClassNotFoundException, SQLException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String savePath = "C:" + File.separator + SAVE_DIR;
File fileSaveDir=new File(savePath);
if(!fileSaveDir.exists()){
fileSaveDir.mkdir();
}
String firstName=request.getParameter("firstname");
String lastName=request.getParameter("lastname");
Part part=request.getPart("file");
String fileName=extractFileName(part);
part.write(savePath + File.separator + fileName);
/*
//You need this loop if you submitted more than one file
for (Part part : request.getParts()) {
String fileName = extractFileName(part);
part.write(savePath + File.separator + fileName);
}*/
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306 /UploadFile","root","root");
String query="INSERT INTO customerDetail (first_name, last_name, file) values (?, ?, ?)";
PreparedStatement pst;
pst=con.prepareStatement(query);
pst.setString(1, firstName);
pst.setString(2,lastName);
String filePath= savePath + File.separator + fileName ;
pst.setString(3,filePath);
pst.executeUpdate();
}
catch(Exception e)
{}
}
// file name of the upload file is included in content-disposition header like this:
//form-data; name="dataFile"; filename="PHOTO.JPG"
private String extractFileName(Part part) {
String contentDisp = part.getHeader("content-disposition");
String[] items = contentDisp.split(";");
for (String s : items) {
if (s.trim().startsWith("filename")) {
return s.substring(s.indexOf("=") + 2, s.length()-1);
}
}
return "";
}
}