它不工作!处理多部分/表单数据请求失败。在插座上读取意外的EOF

问题描述:

我知道这个问题以前已被问过,但没有人帮助过我。 我已经尝试了与此问题相关的每个解决方案,但没有得到解决方案。它不工作!处理多部分/表单数据请求失败。在插座上读取意外的EOF

如果有谁知道这个错误将是非常有益的

我的Ajax代码是:

$('#versionForm').submit(function (e) { 

    formData = new FormData(this); 
    $.each(formAttachements, function (i, file) { 
     formData.append('file-' + i, file); 
     console.log('data' + formData); 
    }); 

    $.ajax({ 

     url: 'UploadServlet', 
     data: formData, 
     type: 'POST', 
     cache: false, 
     contentType: false, 
     processData: false, 
     success: function() { 
      console.log('Files Uploaded'); 
      console.log('versionForm submit ajax success'); 
     }, 
     error: function() { 

      console.log('versionForm submit ajax error'); 
     } 
    }); 
}); 

我的servlet代码是我使用Apache的公地写的代码文件上传文件 - 上传库:

public class UploadServlet extends HttpServlet { 

String version = ""; 
String countryCode = ""; 

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    System.out.println("In Upload Servlet"); 

    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    System.out.println("Is form multipart:" + isMultipart); 

    // check if form is multipart 
    if (isMultipart) { 
     // Create a factory for disk-based file items 
     DiskFileItemFactory factory = new DiskFileItemFactory(); 

     // Configure a repository (to ensure a secure temp location is used) 
     ServletContext context = this.getServletConfig().getServletContext(); 
     File repository = (File) context.getAttribute("javax.servlet.context.tempdir"); 
     factory.setRepository(repository); 

     // Create a new file upload handler 
     ServletFileUpload upload = new ServletFileUpload(factory); 


     try { 

      List<FileItem> items; 

      // Parse the request 
      items = upload.parseRequest(request); 

      for(FileItem item : items) { 
       // Process a regular form field 
       if (item.isFormField()) { 
        System.out.println("Regular form field!"); 
        processFormField(item); 

        // Process a file upload 
       } else { 
        System.out.println("File Upload Field!"); 
        InputStream fileContent = item.getInputStream(); 
        processUploadFile(fileContent,item); 
       } 
      } 




     } catch (FileUploadException ex) { 
      Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 
} 

// for regular form field 
public void processFormField(FileItem item) { 
    String fieldName = item.getFieldName(); 
    String value = item.getString(); 

    if (fieldName.equals("version")) { 
     version = value; 
    } 
    if (fieldName.equals("countryCode")) { 
     countryCode = value; 
    } 
    System.out.println("fieldName " + fieldName); 
    System.out.println("value " + value); 
} 

// for upload file 
public void processUploadFile(InputStream fileContent,FileItem item) { 

    // fields of uploaded file 
    String fieldName = item.getFieldName(); 
    String fileName = item.getName(); 
    String contentType = item.getContentType(); 
    boolean isInMemory = item.isInMemory(); 
    long sizeInBytes = item.getSize(); 
    System.out.println("FieldName:" + fieldName + ",FileName:" + fileName + ",ContentType:" + contentType 
      + ",IsInmemory:" + isInMemory + ",SizeInByte:" + sizeInBytes); 


    String saveDirPath = "C:\\Users\\Gest1\\Desktop\\karan\\server\\" + countryCode + "\\" + version; 
    File file = new File(saveDirPath); 
    // if directory does not exists make directory 
    if (!file.exists()) { 
     file.mkdirs(); 
     System.out.println("Dir created!"); 
    } 

    // Path for file 
    String filePath = saveDirPath + File.separator + fileName; 

    try { 

     while (fileContent.available() > 0) { 
      System.out.println("Inside While Loop"); 
      // write the file 
      File storeFile = new File(filePath); 
      item.write(storeFile); 
      fileContent.close(); 

     } 

    } catch (EOFException ex) { 
     Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

请帮助其越来越复杂

其实我正在使用AJAX,所以发生了什么事情是当我请求servlet处理上传的东西时,它并没有上传整个文件,然后它将回应立即让servlet需要等待直到文件上传饰面。

所以我只是把一个async:false在ajax调用,然后它只是工作!