Javascript 使用AJAX和servlet上载多个文件

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,

我尝试了互联网上几乎所有可用的东西,但似乎没有任何效果

我有一个HTML5 filereader代码,它将从客户端目录
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());
    }
}