0

I'm trying to develop a Java web application wherein I need to upload files into the server. I am using Xampp tomcat server which is integrated into eclipse application. Upon selecting the file to upload, I'm getting File Upload failed status message in the next page. This is my code

fileUpload.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>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>FileUpload</title>
    </head>
    <body>
        <form  action="MsgProcessorServlet" method="post" enctype="multipart/form-data" id="uploadForm">
            <input type="file" name="file"/>
            <input type="hidden" name="formType" value="uploadXML"/>
        </form>
        <p>
            <button type="submit" form="uploadForm" id="Upload">Upload</button>
        </p>
    </body>
</html>

MsgProcessorServlet.java

package com.servlet;

import java.io.IOException;
import java.util.List;
import java.io.File;

import javax.servlet.RequestDispatcher;
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 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;

/**
 * Servlet implementation class MsgProcessorServlet
 */
@WebServlet("/MsgProcessorServlet")
@MultipartConfig
public class MsgProcessorServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MsgProcessorServlet() {
        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(request.getParameter("formType"));
        if(request.getParameter("formType").equals("buildNew")) {
            request.setAttribute("message", "Files generated successfully");
            RequestDispatcher req = request.getRequestDispatcher("buildNewResult.jsp");
            req.forward(request, response);
        }
        else if(request.getParameter("formType").equals("uploadXML")) {
            request.setAttribute("message", "File Upload failed");
            if(ServletFileUpload.isMultipartContent(request)) {
                System.out.println("came here1");
                List<FileItem> multiparts = null;
                try {
                    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
                    diskFileItemFactory.setSizeThreshold(5 * 1024 * 1024);

                    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
                    servletFileUpload.setSizeMax(5 * 1024 * 1024);

                    multiparts = servletFileUpload.parseRequest(request);
                } catch (FileUploadException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.print("multiParts size: ");
                System.out.println(multiparts.size());
                for(FileItem item : multiparts) {
                    System.out.println("came here2");
                    if(!item.isFormField()) {
                        String fileName = new File(item.getName()).getName();
                        System.out.println(fileName);
                        try {
                            request.setAttribute("message", "File Uploaded successfully");
                            item.write(new File("./" + fileName));
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }

            RequestDispatcher req = request.getRequestDispatcher("fileUploadResult.jsp");
            req.forward(request, response);
        }
    }

}

The multipleParts list of type FileItem is not getting populated upon calling parseRequest method of ServletFileUpload.

Harry
  • 2,177
  • 1
  • 19
  • 33
  • Possible duplicate of [How to upload files to server using JSP/Servlet?](https://stackoverflow.com/questions/2422468/how-to-upload-files-to-server-using-jsp-servlet) – Abhishek P May 19 '19 at 07:19

1 Answers1

0

Try this. Working code.

Fileupload.java

import java.io.File;
import java.io.IOException;
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;

/**
 * Servlet to handle File upload request from Client
 * @author Javin Paul
 */
public class Fileupload extends HttpServlet {
    private final String UPLOAD_DIRECTORY = "C:/uploads";

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //process only if its multipart content
        if(ServletFileUpload.isMultipartContent(request)){
            try {
                List<FileItem> multiparts = new ServletFileUpload(
                                         new DiskFileItemFactory()).parseRequest(request);

                for(FileItem item : multiparts){
                    if(!item.isFormField()){
                        String name = new File(item.getName()).getName();
                        item.write( new File(UPLOAD_DIRECTORY + File.separator + name));
                    }
                }

               //File uploaded successfully
               request.setAttribute("message", "File Uploaded Successfully");
            } catch (Exception ex) {
               request.setAttribute("message", "File Upload Failed due to " + ex);
            }          

        }else{
            request.setAttribute("message",
                                 "Sorry this Servlet only handles file upload request");
        }

        request.getRequestDispatcher(/* redirect according to your need. */).forward(request, response); 

    }

}

Index.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>File Upload</title>
    </head>

    <body> 
        <div>
            <h3> Choose File to Upload in Server </h3>
            <form action="Fileupload" method="post" enctype="multipart/form-data">
                <input type="file" name="file" />
                <input type="submit" value="upload" />
            </form>          
        </div>

    </body>
</html>
Abhishek P
  • 58
  • 1
  • 12