Javascript 使用AJAX和servlet上载多个文件
我尝试了互联网上几乎所有可用的东西,但似乎没有任何效果 我有一个HTML5 filereader代码,它将从客户端目录Javascript 使用AJAX和servlet上载多个文件,javascript,java,jquery,ajax,servlets,Javascript,Java,Jquery,Ajax,Servlets,我尝试了互联网上几乎所有可用的东西,但似乎没有任何效果 我有一个HTML5 filereader代码,它将从客户端目录var f=$('#fileUpload')[0]读取所有文件下一步,我想通过AJAX请求将所有这些文件上传到JavaServlet POST方法。为此,我尝试了以下代码- var data = new FormData(); $.each(f, function(key, value) { data.append(key,
var f=$('#fileUpload')[0]读取所有文件代码>下一步,我想通过AJAX请求将所有这些文件上传到JavaServlet POST方法。为此,我尝试了以下代码-
var data = new FormData();
$.each(f, function(key, value)
{
data.append(key, value);
});
postFilesData(data);
//some code..
function postFilesData(data)
{
$.ajax({
url: 'serv2',
type: 'POST',
//enctype: 'multipart/form-data',
data: data,
cache: false,
processData: false,
mimetyep: 'multipart/form-data',
contentType: 'multipart/form-data',
success: function(data)
{
//success
},
error: function(textStatus)
{
console.log('ERRORS: ' + textStatus);
}
});
}
servlet代码doPOst方法-
System.out.println("Hi what request:"+ServletFileUpload.isMultipartContent(request));
System.out.println("hi bro");
// awsUpload.uploadData(foldername);
System.out.println("outside aws");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
String uuidValue = "";
FileItem itemFile = null;
try {
// parses the request's content to extract file data
List formItems = upload.parseRequest(request);
Iterator iter = formItems.iterator();
// iterates over form's fields to get UUID Value
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
}
// processes only fields that are not form fields
if (!item.isFormField()) {
itemFile = item;
}
}
}
catch (Exception e) {
// TODO: handle exception
}
//System.out.println(path);
// response.sendRedirect(path+"/user"+"/home.html");
// System.out.println("done");
if(itemFile==null)
{
System.out.println("File Empty Found");
}
System.out.println("The File Name is"+itemFile.getName());
}
if (!ServletFileUpload.isMultipartContent(request)) {
PrintWriter writer = response.getWriter();
writer.println("Request does not contain upload data");
writer.flush();
return;
}
// configures upload settings
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(THRESHOLD_SIZE);
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setFileSizeMax(MAX_FILE_SIZE);
//upload.setSizeMax(MAX_REQUEST_SIZE);
String uuidValue = "";
FileItem itemFile = null;
try {
// parses the request's content to extract file data
List formItems = upload.parseRequest(request);
Iterator iter = formItems.iterator();
// iterates over form's fields to get UUID Value
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
if (item.getFieldName().equalsIgnoreCase(UUID_STRING)) {
uuidValue = item.getString();
}
}
// processes only fields that are not form fields
if (!item.isFormField()) {
itemFile = item;
}
}
System.out.println("no of items: " + formItems.size());
System.out.println("FILE NAME IS : "+itemFile.getName());
}
}
HTML代码:
<form method="POST" enctype="multipart/form-data" >
<input type="file" class="input-file" name="file[]" id="fileUpload"
onchange="fileChanged();" multiple mozdirectory=""
webkitdirectory="" directory=""/> <br/>
它打印“找到文件为空”,并在下面一行使用NullPointerException崩溃。我知道它没有得到任何数据。请您指出错误的代码或需要添加的代码缺失 谢谢你们的回复,伙计们。。!!
要回答@BalusC的问题,是的,它是多部分上传。它进入while循环,但没有从ajax调用传输数据,代码在第-System.out.println行中断(“文件名为“+itemFile.getName())代码>因为没有要获取其文件名的项。我得到的唯一例外是控制台“NullPointerException”和UI控制台(在JS中调试时)“500内部服务器错误”
我能够修复代码,并且能够通过AJAX调用将数据传输到Servlet。下面是代码。AJAX调用和servlet代码的代码发生了很大的变化/重构--
AJAX请求--
Servlet代码doPost方法--
我能够打印从UI传递的文件对象中没有一个是正确的。谢谢你们抽出时间,伙计们!!:) 还有很多东西需要调试和确定,但你没有透露任何细节。先解决这个问题,然后把问题简化成那个问题。例如,它是多部分内容吗?是否输入了while循环?真的没有例外吗?(您的代码有一个空的catch块,它忽略任何异常并继续代码,就像没有发生任何异常一样)。
if (!ServletFileUpload.isMultipartContent(request)) {
PrintWriter writer = response.getWriter();
writer.println("Request does not contain upload data");
writer.flush();
return;
}
// configures upload settings
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(THRESHOLD_SIZE);
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setFileSizeMax(MAX_FILE_SIZE);
//upload.setSizeMax(MAX_REQUEST_SIZE);
String uuidValue = "";
FileItem itemFile = null;
try {
// parses the request's content to extract file data
List formItems = upload.parseRequest(request);
Iterator iter = formItems.iterator();
// iterates over form's fields to get UUID Value
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
if (item.getFieldName().equalsIgnoreCase(UUID_STRING)) {
uuidValue = item.getString();
}
}
// processes only fields that are not form fields
if (!item.isFormField()) {
itemFile = item;
}
}
System.out.println("no of items: " + formItems.size());
System.out.println("FILE NAME IS : "+itemFile.getName());
}
}