第一步:编辑前台页面
主要以表单形式提交,后面会将ajax提交其实他也是封装成表单数据
<form method="POST" enctype="multipart/form-data" action="fileupload">
File to upload: <input type="file" name="upfile"><br/>
Notes about the file: <input type="text" name="note"><br/> <br/>
<input type="submit" value="Press"> to upload the file!
</form>
注意表单一定要写enctype="multipart/form-data",不然识别不到
第二步:编辑后台servlet
package com.lb.excel;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.MultipartStream.MalformedStreamException;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.commons.fileupload.util.Streams;
@WebServlet("/fileupload")
public class excelimp extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(111);
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8;");
PrintWriter out = response.getWriter();
//检查我们是否有文件上传请求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println(isMultipart);
if(isMultipart) {
HttpServletRequest servletRequest = request;
RequestContext ctx = new ServletRequestContext(servletRequest);
FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = null;
try {
iter = upload.getItemIterator(ctx);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
try {
while (iter.hasNext()) {
FileItemStream item = iter.next();
FileItem fileItem = fileItemFactory.createItem(item.getFieldName(),
item.getContentType(),
item.isFormField(),
item.getName());
Streams.copy(item.openStream(), fileItem.getOutputStream(), true);
System.out.println("开始保存");
InputStream in = fileItem.getInputStream();
//...文件保存操作....
System.out.println("保存完成");
}
} catch (MalformedStreamException e) {
e.printStackTrace();
} catch (FileUploadException e) {
e.printStackTrace();
}
}else {
out.println(-1);
}
}
}
详情可参考:http://commons.apache.org/proper/commons-fileupload/index.html
http://commons.apache.org/proper/commons-fileupload/using.html
上述提交会存在页面重新刷新的问题,那我们看看如何用ajax提交;
var self = this;
var file = event.target.files[0];
var form = new FormData();
form.append("file", file);
console.info(file);
$.ajax({
url: "/Excelimpl/excelimp",
type: "post",
data: form,
cache: false,
processData: false,
contentType: false,
dataType: "json",
success: function (result) {
console.info(result);
result.splice(0, 1);
}
})
只需将文件封装成变表单数据即可。