package com.ajaxuploadfile.test;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class UpLoad
*/
@WebServlet("/upload.do")
public class UpLoad extends HttpServlet {
private static final long serialVersionUID = 1L;
String filePath = null;
/**
* @see HttpServlet#HttpServlet()
*/
public UpLoad() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
// 设置返回的字符集的编码
response.setCharacterEncoding("UTF-8");
// 设置泛黄的 类型
response.setContentType("text/html;charset=UTF-8");
System.out.println("Post");
// <!-- enctype="multipart/form-data"告诉服务器是一个复杂的表单
// -->这样是接收不到的,因为数据全部在流里面
// String name = request.getParameter("username");
// String gender = request.getParameter("usergender");
// System.out.println("用户 的姓名:"+name+" 性别是"+gender);
PrintWriter out = null;
// 首先判断是不是复杂数据的提交
boolean isMulti = ServletFileUpload.isMultipartContent(request);
if (isMulti) {
// 配置磁盘的缓存工厂,接收文件的准备工作
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小
factory.setSizeThreshold(1024 * 1024 * 2);
// 位置和大小
// 直接传人工程目录下的要刷新工程才可以在web中访问到
// File file = new
// File(request.getServletContext().getRealPath("/"));
// 传到C盘中
File file = new File("C://myFileUpload/");
// 如果这个文件不存在我们就创建/
if (!file.exists()) {
file.mkdir();
}
factory.setRepository(file);
// 创建我们的服务器解析上次参数的对象
// 把我们前面设置的磁盘缓存对象传入
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
// 设置上传对象中文件的大小
servletFileUpload.setFileSizeMax(1024 * 1024 * 2);
// 设置上传对象总的大小
servletFileUpload.setSizeMax(1024 * 1024 * 10);
// 设置上传的字符编码
servletFileUpload.setHeaderEncoding("UTF-8");
// Ids ids = new Ids();
// 处理客服端上传的数据
out = response.getWriter();
// 把接受到的数据放入一个list中
List<FileItem> items = null;
try {
//form中的数据会以key/value的形式存在request对象中,我们可以取得全部的key循环判断是否是multi类型数据
//1.是:保存到服务端
//2.否:那肯定是表单的key/value数据,根据可以取得value就行
items = servletFileUpload.parseRequest(request);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 循环判断items
for (FileItem fileItem : items) {
// 如果这个item是一般的text之类的那我们就 就是 一般数据为===》字符
if (fileItem != null) {
if (fileItem.isFormField()) {
// 获得在表单中的Name属性getFieldName是相对于得到key的值,getName是得到File的Name
String fielName = fileItem.getFieldName();
System.out.println(fielName);
// System.out.println(fileItem.getString());
// //解决乱码问题
System.out.println(fileItem.getString("UTF-8"));
}
// 如果是“复杂”的数据
else {
// 得到上传文件名
String reqPath = fileItem.getName();
System.out.println(reqPath);
// 在 eclipse的浏览器中会把文件的路径一起带上,
if (reqPath.indexOf("\\") != -1) {
reqPath = reqPath.substring(reqPath
.lastIndexOf("\\"));
}
// 写文件
filePath = file.toString() + "/" + reqPath;
// 替换一下文件名,不然在插入数据库的时候回出现错误
filePath = filePath.replace("\\", "/");
File upFile = new File(filePath);
System.out.println(filePath + "图片真实路劲");
try {
fileItem.write(upFile);
// response中的输出流不要关闭,不然在前台接收不到输出的信息
// out.write("{'name': 'ys', 'age': '?'}");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.write("上传失败");
}
filePath = request.getServletContext().getContextPath()
+ "/" + fileItem.getName();
}
}
}
out.write("上传成功");
}
}
}