它不工作!处理多部分/表单数据请求失败。在插座上读取意外的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调用,然后它只是工作!