我是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请求?
谢谢!