commons fileupload(Apache) - java
I am getting null pointer exception here:
List fileItems = upload.parseRequest(req);
That happens if the number of line in the file is greater the 2000 approx, as I could upload the file of lines above 1000. Someone please help me out. The form is below.
<form name="fos_picks" id="fos_picks" action="<%=path%>/fos_upld" method="post" enctype="multipart/form-data" >
<br/><br/><br/><br/>
<p align="center">
<input type="file" name="file" size="50" /><br/>
<br/>
<input type="submit" class="buttons" value="Upload File" />
</p>
</form>
Upload controller code...
package file_proc;
import DBConn.DBConn;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.sql.PreparedStatement;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
#WebServlet(name="file_upld", urlPatterns = {"/file_upld"})
public class file_upld extends HttpServlet {
private boolean isMultipart;
private String filePath;
private int maxFileSize = 50 * 1024;
private int maxMemSize = 10 * 1024;
private File file ;
/* public void init( ){
// Get the file location where it would be stored.
filePath =
getServletContext().getInitParameter("file-upload");
}*/
#Override
public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, java.io.IOException {
// Check that we have a file upload request
java.io.PrintWriter out = res.getWriter( );
// out.println("entered");
isMultipart = ServletFileUpload.isMultipartContent(req);
res.setContentType("text/html");
if( !isMultipart ){
out.println("!multipart");
System.out.println("here");
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:/temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
ServletContext servletContext = getServletContext();
String path = servletContext.getRealPath("/");
BufferedReader br=null;
String fileName="";
DBConn db = new DBConn();
try{
// Parse the request to get file items.
System.out.println("here1"+req);
List fileItems = upload.parseRequest(req);
// Process the uploaded file items
Iterator i = fileItems.iterator();
/* out.println("<html>");
out.println("<head>");
out.println("<title>Upload</title>");
out.println("</head>");
out.println("<body>");*/
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( "c:/Temp/" +
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( "c:/Temp/"+
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
if(!file.exists())
{
File fold=new File(file.getParent());
fold.mkdirs();
}
fi.write( file ) ;
System.out.println("Uploaded Filename: " + fileName + "<br>");
}
}
}catch(Exception ce)
{
out.println("<font size='30' color='red'>Error Code 016</font>");
//out.println("Exception1: "+ce);
}
//read uploaded file and insert into table********************************************
// String newline = System.getProperty("line.separator");
// File file = new File(path+"//"+fileName);
// file.createNewFile();
try{
if(file.isFile())
{
br = new BufferedReader(new FileReader(file));
String str="";
String temp[]=null;
file.canWrite();
file.canRead();
file.setWritable(true);
db.conn.setAutoCommit(false);
while((str=br.readLine())!=null)
{
temp=str.split(" ");
// PreparedStatement ps = db.conn.prepareStatement("INSERT INTO file_proc VALUES(?,?,?,?,?,?,?,?,?,STR_TO_DATE(?,'%m/%d/%Y'))");
PreparedStatement ps = db.conn.prepareStatement("INSERT INTO file_proc(run_date,zone,location,bank,file_type,num_rec,ex_sett_date,ex_stat_date) "
+ "VALUES(STR_TO_DATE(?,'%m/%d/%Y'),?,?,?,?,?,STR_TO_DATE(?,'%m/%d/%Y'),STR_TO_DATE(?,'%m/%d/%Y'))");
ps.setString(1,temp[0]);
ps.setString(2,temp[1]);
ps.setString(3,temp[2]);
ps.setString(4,temp[3]);
ps.setString(5,temp[4]);
ps.setInt(6,Integer.parseInt(temp[5]));
ps.setString(7,temp[6]);
ps.setString(8,temp[7]);
ps.executeUpdate();
ps.close();
}
db.conn.commit();
db.conn.setAutoCommit(true);
db.conn.close();
br.close();
file.delete();
// RequestDispatcher rd = req.getRequestDispatcher("./status/status.jsp");
// rd.forward(req, res);
out.print("success");
// out.println("</html>");
}
else
{
out.println(file+" is not a file");
}
}catch(Exception ex) {
out.println("file name= "+fileName);
// out.println("DBEX= "+ex );
out.println("<font size='30' color='red'>Error Code 017 - Recommended date format = m/d/yyyy.</font>");
out.println("<font size='30' color='red'>Check the column order</font>"+ex);
//file.delete();
// RequestDispatcher rd = req.getRequestDispatcher("./status/error.jsp");
// rd.forward(req, res);
}finally{
try{
db.conn.close();
br.close();
}catch(Exception e){}
}
}
#Override
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, java.io.IOException {
doPost(request, response);
}
}
**** Here is form ******
<form name="file_proc" id="file_proc" method = "post" action="../file_upld" enctype="multipart/form-data">
<br/><br/><br/><br/>
<p align="center">
<input type="file" id="file" name="file" size="50" /><br/>
<br/>
<input type="submit" class="buttons" value="Upload File" />br/><br/><br/>
</p>
</form>
Upload controller code...
package file_proc;
import DBConn.DBConn;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.sql.PreparedStatement;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
#WebServlet(name="file_upld", urlPatterns = {"/file_upld"})
public class file_upld extends HttpServlet {
private boolean isMultipart;
private String filePath;
private int maxFileSize = 50 * 1024;
private int maxMemSize = 10 * 1024;
private File file ;
/* public void init( ){
// Get the file location where it would be stored.
filePath =
getServletContext().getInitParameter("file-upload");
}*/
#Override
public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, java.io.IOException {
// Check that we have a file upload request
java.io.PrintWriter out = res.getWriter( );
// out.println("entered");
isMultipart = ServletFileUpload.isMultipartContent(req);
res.setContentType("text/html");
if( !isMultipart ){
out.println("!multipart");
System.out.println("here");
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:/temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
ServletContext servletContext = getServletContext();
String path = servletContext.getRealPath("/");
BufferedReader br=null;
String fileName="";
DBConn db = new DBConn();
try{
// Parse the request to get file items.
System.out.println("here1"+req);
List fileItems = upload.parseRequest(req);
// Process the uploaded file items
Iterator i = fileItems.iterator();
/* out.println("<html>");
out.println("<head>");
out.println("<title>Upload</title>");
out.println("</head>");
out.println("<body>");*/
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( "c:/Temp/" +
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( "c:/Temp/"+
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
if(!file.exists())
{
File fold=new File(file.getParent());
fold.mkdirs();
}
fi.write( file ) ;
System.out.println("Uploaded Filename: " + fileName + "<br>");
}
}
}catch(Exception ce)
{
out.println("<font size='30' color='red'>Error Code 016</font>");
//out.println("Exception1: "+ce);
}
//read uploaded file and insert into table********************************************
// String newline = System.getProperty("line.separator");
// File file = new File(path+"//"+fileName);
// file.createNewFile();
try{
if(file.isFile())
{
br = new BufferedReader(new FileReader(file));
String str="";
String temp[]=null;
file.canWrite();
file.canRead();
file.setWritable(true);
db.conn.setAutoCommit(false);
while((str=br.readLine())!=null)
{
temp=str.split(" ");
// PreparedStatement ps = db.conn.prepareStatement("INSERT INTO file_proc VALUES(?,?,?,?,?,?,?,?,?,STR_TO_DATE(?,'%m/%d/%Y'))");
PreparedStatement ps = db.conn.prepareStatement("INSERT INTO file_proc(run_date,zone,location,bank,file_type,num_rec,ex_sett_date,ex_stat_date) "
+ "VALUES(STR_TO_DATE(?,'%m/%d/%Y'),?,?,?,?,?,STR_TO_DATE(?,'%m/%d/%Y'),STR_TO_DATE(?,'%m/%d/%Y'))");
ps.setString(1,temp[0]);
ps.setString(2,temp[1]);
ps.setString(3,temp[2]);
ps.setString(4,temp[3]);
ps.setString(5,temp[4]);
ps.setInt(6,Integer.parseInt(temp[5]));
ps.setString(7,temp[6]);
ps.setString(8,temp[7]);
ps.executeUpdate();
ps.close();
}
db.conn.commit();
db.conn.setAutoCommit(true);
db.conn.close();
br.close();
file.delete();
// RequestDispatcher rd = req.getRequestDispatcher("./status/status.jsp");
// rd.forward(req, res);
out.print("success");
// out.println("</html>");
}
else
{
out.println(file+" is not a file");
}
}catch(Exception ex) {
out.println("file name= "+fileName);
// out.println("DBEX= "+ex );
out.println("<font size='30' color='red'>Error Code 017 - Recommended date format = m/d/yyyy.</font>");
out.println("<font size='30' color='red'>Check the column order</font>"+ex);
//file.delete();
// RequestDispatcher rd = req.getRequestDispatcher("./status/error.jsp");
// rd.forward(req, res);
}finally{
try{
db.conn.close();
br.close();
}catch(Exception e){}
}
}
#Override
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, java.io.IOException {
doPost(request, response);
}
}
**** Here is form ******
<form name="file_proc" id="file_proc" method = "post" action="../file_upld" enctype="multipart/form-data">
<br/><br/><br/><br/>
<p align="center">
<input type="file" id="file" name="file" size="50" /><br/>
<br/>
<input type="submit" class="buttons" value="Upload File" />br/><br/><br/>
</p>
</form>
here is the log4j stuff, it shows the error at filter.java, which i am not using in the current servlet.
[ERROR] 29:05(file_upld.java:doPost:172) failed!
java.lang.NullPointerException at
file_proc.file_upld.doPost(file_upld.java:120) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at filter.filter.doFilter(filter.java:16) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Here goes the filter.javapackage filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
public class filter implements Filter{
private FilterConfig config=null;
#Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
{
HttpServletResponse hsr = (HttpServletResponse) res;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);
}
#Override
public void destroy() { }
#Override
public void init(FilterConfig config) {
this.config = config;
}
}
Your concrete problem is caused by bad exception handling and tight-coupling view with the controller.
After filtering noise from your code, it goes roughly like:
File file = null;
try {
// ...
file = new File(...);
// ...
} catch (Exception e) {
out.println("...");
}
try {
if (file.isFile())
// ...
} else {
// ...
}
} catch (Exception e) {
out.println("...");
}
The NullPointerException is been thrown at the line with the if (file.isFile()) block. This thus means that the first try block threw an exception, hereby leaving the file as null.
The cause of the problem is two-fold:
The first try block is not returning from the servlet method on exception, but incorrectly continuing the code flow.
The second try block is not checking beforehand if the file is not null.
Your concrete problem is however much bigger. You're completely swallowing exceptions and printing irrelevant HTML code instead of throwing them through and/or logging the exceptions.
Replace your catch blocks as follows:
} catch (Exception e) {
throw new ServletException(e);
}
By default, this way the exception will be logged and be displayed in its full glory, complete with the stacktrace, in a HTTP 500 error page. The stacktrace gives you a wealth of information to understand the problem and fix it.
Unrelated to the concrete problem, there are many other conceptual and design mistakes in the code, but they are so far not directly related to the concrete problem. I would however recommend to take a pause and go through some sane Servlet books/tutorials/resources. This code seems to be just cobbled together based on snippets found in Google instead of being well thought out written. The first step would be understanding how servlets actually work: How do servlets work? Instantiation, sessions, shared variables and multithreading
Related
Get File uploaded from a Servlet [duplicate]
This question already has answers here: How can I upload files to a server using JSP/Servlet? (14 answers) Closed 2 years ago. I'm trying to get a file uploaded by user in a servlet. I read it from here. But upload.parseRequest(request) gives compile time error saying RequestContext cannot to applied to HttpServletRequest object. why its not working here? I've also included commons-fileupload-1.3.2 and commons-io-2.5 in WEB-INF/lib folder. DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File("c:\\temp")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. List fileItems = upload.parseRequest(request);} catch(Exception e){ }
In servlet 3.0 You can do it with : example class upload file : package com.app.upload; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.Part; /** * * #author ha: 12/05/2016 17:30 */ public class UploadPicture { private static final String EXTENSION = "."; public static final String SAVE_DIR = "uploadImage"; private static UploadPicture uploadPicture = null; private static final Logger LOGGER = Logger.getLogger(UploadPicture.class .getName()); private UploadPicture() { } public String TranseferPicture(Part part, String appPath) { String savePath = appPath + File.separator + SAVE_DIR; File fileSaveDir = new File(savePath); if (!fileSaveDir.exists()) { fileSaveDir.mkdir(); } String fileName = new SimpleDateFormat("yyyyMMdd_HHmmss") .format(new Date()); String nameImage = fileName + EXTENSION + getExtensionImage(part); try { part.write(savePath + File.separator + nameImage); LOGGER.log(Level.FINE, "Upload Picture to {0} ", savePath + File.separator + nameImage); } catch (IOException ex) { LOGGER.log(Level.SEVERE, ex.toString(), ex); } return nameImage; } private String getExtensionImage(Part part) { return part.getContentType().split("/")[1]; } public static UploadPicture createNewInstance() { if (uploadPicture == null) { uploadPicture = new UploadPicture(); } return uploadPicture; } } and in your servlet like this : import java.io.IOException; 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; import com.app.upload.UploadPicture; /** * * #author ha date: 12/05/2016 17:42 */ #WebServlet(urlPatterns = "/upload", loadOnStartup = 1) #MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB maxFileSize = 1024 * 1024 * 10, // 10MB maxRequestSize = 1024 * 1024 * 50) // 50MB public class ControllerUploadPicture extends HttpServlet { private static final long serialVersionUID = 1L; #Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String appPath = request.getServletContext().getRealPath(""); Part part = request.getPart("file"); UploadPicture.createNewInstance().TranseferPicture(part, appPath); getServletContext().getRequestDispatcher("/show.jsp").forward(request, response); } } in your jsp file <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Upload file</title> </head> <body> <form method="post" action="upload" enctype="multipart/form-data"> <input type="file" name="file" /><br /> <input type="submit" value="Upload" /> </form> </body> </html> this example available in my account github https://github.com/abdedaime/UploadPictureServlet
Is possible to upload a file.xlsx, process it without save it in server? I am using jaxrs
I'm using jaxrs for uploading files *.xlsx. Is possible to upload this files and process them in memory? I only want read that file, Process with Apache POI and save information at DataBase. Without save them in server Thanks
sorry for late reply, this answer may help somebody. Yes, It is possible to read the content of an uploaded .xlsx file in memory [without saving the uploaded content to a physical file]. but this approach require more memory, as the entire file content will be stored in buffer. below servlet, is a working example for this, with slight modification you can convert this code into JSP, if needed. pass the uploaded file's inputstream while creating XSSFWorkbook object, as shown below, you will be able to read the file content as in the example code. add apache-poi jars and apache commons-fileupload.jar in the WEB-INF/lib folder for the correct working of this code. import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.io.FilenameUtils; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.List; import java.util.Iterator; #WebServlet("/FileUploadServlet") public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); OPCPackage pkg = null; XSSFWorkbook xlsxbook = null; InputStream xlsxContentStream = null; try { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { List<FileItem> items = new ServletFileUpload( new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fieldName = item.getFieldName(); String fileName = FilenameUtils.getName(item.getName()); xlsxContentStream = item.getInputStream(); pkg = OPCPackage.open(xlsxContentStream); xlsxbook = new XSSFWorkbook(pkg); XSSFSheet sheet = xlsxbook.getSheetAt(0); Iterator<Row> itr = sheet.iterator(); while (itr.hasNext()) { Row row = itr.next(); // Iterating over each column of Excel file Iterator<Cell> cellIterator = row.cellIterator(); String text = ""; double num = 0; while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: text = cell.getStringCellValue(); break; case Cell.CELL_TYPE_NUMERIC: num = cell.getNumericCellValue(); break; default: } } out.print(text + " " + num); //call database insert method here and pass the xlsx column values } } } } out.flush(); } catch (FileUploadException e) { throw new ServletException("Cannot parse multipart request.", e); } catch (Exception e) { throw new ServletException("", e); } finally { if(null!=xlsxContentStream){ xlsxContentStream.close();} if(null!=pkg){ pkg.close();} } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } } your jsp/html file should have enctype="multipart/form-data" in the form <form action="FileUploadServlet" name="form2" method="post" enctype="multipart/form-data"> Select a .xlsx File to upload :<input type="file" name="file" id="file" size="50" /> <input type="submit" value="Upload xlsx File"/> </form>
Unable to upload file : code doesn't enter the while loop
I am unable to upload file. There is no exception,no error but when the code is run, file doesn't uploaded. What could be the reason for it? As debugged : iterator.hasNext() returns false ` <form action='UploadMatch' method='post' enctype="multipart/form-data"> <input type='file' /> <input type='submit' class='btn btn-default' id='uploadmatch' />upload </form> /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FilenameUtils; /** * * #author user */ public class UploadMatch extends HttpServlet { #Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); String path = request.getParameter("Data"); try { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if( !isMultipart ) { writer.println("File cannot be uploaded !"); } else { DiskFileItemFactory diskFileItem = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(diskFileItem); List list = null; try { list = fileUpload.parseRequest(request); }catch(Exception exc) { writer.println(exc); } Iterator iterator = list.iterator(); while(iterator.hasNext()) { // WHILE LOOP (DOESN'T ENTER) FileItem fileItem = (FileItem)iterator.next(); if(fileItem.isFormField()) { // Process regular form field (input type="text|radio|checkbox|etc", select, etc). } else { // Process form file field (input type="file"). String fieldName = fileItem.getFieldName(); String fileName = FilenameUtils.getName(fileItem.getName()); File file = new File(request.getServletContext().getContextPath(),fileName); writer.println(">>>>>>>>>>W:/" + " " + fileName); fileItem.write(file); } } } }catch(Exception exc) { writer.println(exc); } } } Note : The code doesn't enter the while loop
Servlet can be used with an HTML form tag to allow users to upload files to the server
I want to upload an excel file. This file will be saved in particular path with rename instead of file name. That rename contains name,current system time,and date. For example uploading a new.xsl file it will be saved like this new_4/14/2014_1:57. I tried lot but still am getting problem. I here attached my snippet. Can u tell me where i have done mistake. </head> <body> <h1>welcome to excel upload</h1> <form action ="UploadServlet" method ="post" enctype ="multipart/form-data"> Upload a selected file: <input type="file" name="file" size="50"><br><br> <input type="submit" value="uploadFile"> <input type="submit" value="cancel"> </form> </body> </html> output:welcome to excel upload Upload a selected file: package com.bala; import java.awt.List; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Iterator; import java.util.Date; import javax.servlet.ServletConfig; import javax.servlet.ServletException; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.output.*; public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private boolean isMultipart; private String filePath; private int maxFileSize = 250 * 1024; private int maxMemSize = 4 * 1024; private File file ; String s1 = " "; String s2 = " "; public void init( ){ filePath = getServletContext().getInitParameter("file-upload"); } public UploadServlet() {} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(maxMemSize); factory.setRepository(new File("C:/glassfish3/glassfish/domains/domain1/applications/data")); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. java.util.List<FileItem> fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); String fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); //* request.setAttribute("UPLOAD_DIRECTORY", file); // Date date = new Date(); //SimpleDateFormat ft = //new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); //String s = ft.format(date); // String filename = "bala"; //String filename1 = s+ "_" + filename; //String fileName1 = file.getFileName(); // out.println(filename1); //Rename the file // File oldfile = new File(s1); // out.println("old file name.."+oldfile); // File newfile = new File(s2); //out.println("new file name..."+newfile); // if(oldfile.renameTo(newfile)){ //filename = "bala" + file.separator +filename1; // Write the file if( fileName.lastIndexOf("\\") >= 0 ){ file = new File(filePath + fileName.substring( fileName.lastIndexOf("\\") )); }else{ file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ; } fi.write( file); out.println("Uploading the file successfully." +"<br>"); out.println("Uploaded Filename: " + fileName+"<br>"); } } out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException,java.io.IOException { throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required."); } }
After going through the commented lines of your codes, I think I got what you are trying to do. Check if that file already excists in the folder, if yes, then rename old one to something and write new on old one. If that is the case, File uploadedFile = new File(fileName); if(uploadedFile.exists()){ // We check if there exists an old file String timestamp = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz").format(new Date()); String backupFileName = "bkp_" + timestamp + fileName; uploadedFile.renameTo(new File(backupFileName)); //If there exists , then rename it } //Now write the new file I could not check the code, but sure you could get the idea out of this. With your update Why not simply, String timestamp = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz").format(new Date()); String newFileName = fileName + "_" + timestamp; File newFile = new File(newFileName); //Now write the new file //Well, writing the file to disk do depend on several facts. //I guess you are not asking the codes to write the file to disk.
it's better u will use only the html page for ui purpose. and on back hand side write servlet code. go through the following link it will solve your problem. servlets-file-uploading
Servlet Issue - Index page not popping up
I am using spring framework and i am having Index.jsp like : Code: <html> <head></head> <body> <p>File Upload</p> <form action="ImportService" enctype="multipart/form-data" method="POST"> <input type="file" name="file1"><br> <input type="Submit" value="Upload File"><br> </form> </body> I have ImportService as import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletException; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class ImportService extends HttpServlet { private static final String TMP_DIR_PATH = "c:\\tmp"; private File tmpDir; private static final String DESTINATION_DIR_PATH = "c:\\files"; private File destinationDir; public void init(ServletConfig config) throws ServletException { super.init(config); tmpDir = new File(TMP_DIR_PATH); if (!tmpDir.isDirectory()) { throw new ServletException(TMP_DIR_PATH + " is not a directory"); } // String realPath = // getServletContext().getRealPath(DESTINATION_DIR_PATH); destinationDir = new File(DESTINATION_DIR_PATH); if (!destinationDir.isDirectory()) { throw new ServletException(DESTINATION_DIR_PATH + " is not a directory"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = "param"; String value = request.getParameter(name); String welcomeMessage = "Welcome " + value; System.out.println("Message=" + welcomeMessage); response.setContentType("text/html"); response.setContentType("text/plain"); System.out.println("Inside Get Method"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Inside Post Method"); PrintWriter out = response.getWriter(); DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); /* * Set the size threshold, above which content will be stored on disk. */ fileItemFactory.setSizeThreshold(1 * 1024 * 1024); // 1 MB /* * Set the temporary directory to store the uploaded files of size above * threshold. */ fileItemFactory.setRepository(tmpDir); ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory); try { /* * Parse the request */ List items = uploadHandler.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); /* * Handle Form Fields. */ if (item.isFormField()) { out.println("File Name = " + item.getFieldName() + ", Value = " + item.getString()); } else { // Handle Uploaded files. out.println("Field Name = " + item.getFieldName() + ", File Name = " + item.getName() + ", Content type = " + item.getContentType() + ", File Size = " + item.getSize()); } out.close(); } } catch (FileUploadException ex) { log("Error encountered while parsing the request", ex); } catch (Exception ex) { log("Error encountered while uploading file", ex); } // doGet(request, response); } } In my web.xml, I have <servlet> <servlet-name>ImportService</servlet-name> <servlet-class>com.service.ImportService</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImportService</servlet-name> <url-pattern>/ImportService/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/jsp/Index.jsp</welcome-file> </welcome-file-list> Now when I try to hit the url: http://localhost:8080/delta-webapp/ImportService/jsp/Index.jsp then it gives me blank message and html form is not rendered. Any suggestions or pointers?
change your entry URL from http://localhost:8080/delta-webapp/ImportService/jsp/Index.jsp to http://localhost:8080/delta-webapp/jsp/Index.jsp You've mapped ImportService servlet to handle all requests to /ImportService/*. Your index.jsp is located at /jsp/Index.jsp. If instead you just put /delta-webapp It /may/ work. In general though, I don't think welcome files have hard coded paths. Typically you specify something like index.jsp as your welcome file and if nothing handles the request at a particular location, it will fall back to see if one of the welcome files listed is available and will render that.