title: Uploading file with ajax and java servlet
body: <p>I am trying to upload a csv file inside from a jsp page using a servlet that extends HttpServlet. Inside the jsp page I am using an ajax that should call the servlet.</p>
  
  <p>This is the ajax part:</p>
  
  <pre><code>    $(function() {
      $(".upldBtn").click(function() {
  
          alert("Upload button pushed");
  
          $.ajax({
              type: "POST",
              url: contextPath + servletPath,
              data: "action=get&amp;custIdList=" + $('#custIdList').val(),
              async: false,
              dataType: "text/csv; charset=utf-8", 
              success: function(data){
                    alert("success");
                }
          });
      });
  </code></pre>
  
  <p>The contextPath and servletPath are also declared, I didn't specified them here.</p>
  
  <p>In the jsp page, I have this form inside a table : </p>
  
  <pre><code>&lt;form method="post" action="CSRUploadListServlet" enctype="multipart/form-data"&gt;
  &lt;input type="file" name="custIdList" id="custIdList" /&gt;
  &lt;input type="submit" value="Upload" class="upldBtn" /&gt;
  &lt;/form&gt;
  </code></pre>
  
  <p>Inside the servlet, I want to use this doPost method: </p>
  
  <pre><code>protected void doPost(HttpServletRequest request,
          HttpServletResponse response) throws ServletException, IOException {
  
      String methodName = "doPost";
  
      logger.debug("[{}] call", methodName);
  
      // checks if the request actually contains upload file
      if (!ServletFileUpload.isMultipartContent(request)) {
          PrintWriter writer = response.getWriter();
          writer.println("Request does not contain upload data");
          logger.debug("[{}] Request does not contain upload data",
                  methodName);
          writer.flush();
          return;
      }
  
      // configures upload settings
      DiskFileItemFactory factory = new DiskFileItemFactory();
      factory.setSizeThreshold(THRESHOLD_SIZE);
      factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
      logger.debug("[{}] factory= {} ", methodName, factory);
  
      ServletFileUpload upload = new ServletFileUpload(factory);
      upload.setFileSizeMax(MAX_FILE_SIZE);
      upload.setSizeMax(MAX_REQUEST_SIZE);
      logger.debug("[{}] upload= {} ", methodName, upload);
  
      // constructs the directory path to store upload file
      String uploadPath = getServletContext().getRealPath("")
              + File.separator + UPLOAD_DIRECTORY;
      // creates the directory if it does not exist
      File uploadDir = new File(uploadPath);
      if (!uploadDir.exists()) {
          uploadDir.mkdir();
          logger.debug("[{}] upload directory = {} ", methodName,
                  uploadDir.mkdir());
      }
  
      try {
          // parses the request's content to extract file data
          List formItems = upload.parseRequest(request);
          Iterator iter = formItems.iterator();
  
          // iterates over form's fields
          while (iter.hasNext()) {
              FileItem item = (FileItem) iter.next();
              // processes only fields that are not form fields
              if (!item.isFormField()) {
                  String fileName = new File(item.getName()).getName();
                  String filePath = uploadPath + File.separator + fileName;
                  File storeFile = new File(filePath);
  
                  // saves the file on disk
                  item.write(storeFile);
              }
          }
          request.setAttribute("message",
                  "Upload has been done successfully!");
          logger.debug("[{}] Upload has been done successfully! ", methodName);
      } catch (Exception ex) {
          request.setAttribute("message",
                  "There was an error: " + ex.getMessage());
          logger.debug("[{}] There was an error: {} ", methodName, ex);
      }
      getServletContext().getRequestDispatcher(
              "/WEB-INF/web/csrCustomerLists/message.jsp").forward(request,
              response);
  }
  </code></pre>
  
  <p>All this gets stuck at <code>if (!ServletFileUpload.isMultipartContent(request))</code>, returning that: 'Request does not contain upload data'.</p>
  
  <p>I am sure that I am not writing the ajax correctly, but I can't seem to find out where I am doing it wrong.</p>
  
  <p>Thanks.</p>