apache.commons.fileupload无法使用jquery.ajax

时间:2016-10-29 07:20:27

标签: jquery ajax jsp servlets apache-commons-fileupload

我是JSP和Servlet的新手,我尝试上传单个文件并使用jQuery.ajax()将其移动到我的目录。当我将action="servletName"放在没有ajax的表单中时,它工作正常,我认为我的servlet工作正常(我甚至尝试使用JSP,它也很好)。但是,当我使用ajax时,它没有做任何事情。我也试过用PHP使用相同的ajax代码,PHP中的所有东西都运行正常。

这是我的代码btw:

HTML表单

<form method="POST" enctype="multipart/form-data" id="frmFile">
        <input type="file" name="file"/>
        <input type="submit" name="submit" value="Submit"/>
    </form>

JS

var fd = new FormData();

$("#frmFile").submit(function(){
   $.ajax({

       type: 'post',
       url: '../init.jsp',
       data: fd,
       processData: false,
       cache: false,
       contentType: false,
       async: true, //with or without
       success: function(data){
           alert(data);
       }           
   });
   return false;
});

的Servlet

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;

public class init extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {
        boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
        if(isMultiPart){
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            String path;
            //path = getServletContext().getRealPath("")+"assets\\uploads";
            path = "C:/Users/M/Desktop";
            try{
                List<FileItem> fileItems = upload.parseRequest(request);

                for(FileItem items: fileItems){
                    if(!items.isFormField()){
                        String name = new File(items.getName()).getName();
                        items.write(new File(path+File.separator+name));
                    }                        
                }
                out.print("SUCCESSFUL!");
            }catch(Exception e){

            }
        }else{
            out.print("!multipart");
        }
    }
}
//doGet, doPost, getServletInfo

此外,我也确信我的ajax有效,因为除了它使用PHP之外。它打印(警报)&#34;成功!&#34;这是在servlet的try-block中编码的。

我的问题是我在servlet代码中遗漏了什么?或者apache.commons.fileupload只是阻止ajax请求?

谢谢!

0 个答案:

没有答案