I know this question has been asked previously but none of them helped me. I've tried every solution related to this question but didn't got the solution.
If anyone knows about this error It will be very helpful
My ajax code is :
$('#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');
}
});
});
My Servlet code is where I wrote the code for fileUpload using apache-commons file-upload library:
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();
}
}
Please help its getting complex
Actually as I was using AJAX so what is happening is when I request servlet to process the upload thing it wasn't uploading whole file and then It is giving response back Immediately So the servlet needs to wait untill the file Upload finishes.
So I just put a async : false In ajax call and then It just worked!