我知道之前已经问过这个问题,但他们都没有帮助我。 我已尝试过与此问题相关的所有解决方案,但没有得到解决方案。
如果有人知道此错误,那将非常有帮助
我的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-commons文件上传库编写fileUpload代码的地方:
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 :(得分:0)
实际上我正在使用AJAX所以正在发生的事情就是当我请求servlet处理上传的东西时它不上传整个文件然后它立即给出响应所以servlet需要等待直到文件上传饰面。
所以我只是在ajax调用中放了一个 async:false 然后它就运行了!