2017-10-05 80 views
0

我知道這個問題以前已被問過,但沒有人幫助過我。 我已經嘗試了與此問題相關的每個解決方案,但沒有得到解決方案。它不工作!處理多部分/表單數據請求失敗。在插座上讀取意外的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(); 
    } 
} 

請幫助其越來越複雜

回答

0

其實我正在使用AJAX,所以發生了什麼事情是當我請求servlet處理上傳的東西時,它並沒有上傳整個文件,然後它將回應立即讓servlet需要等待直到文件上傳飾面。

所以我只是把一個async:false在ajax調用,然後它只是工作!

相關問題