packagecom.eviac.blog.restws;importjava.io.File;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;public class FileUpload extendsHttpServlet{private static final long serialVersionUID = 1L;//上传文件存储目录
private static final String UPLOAD_DIRECTORY = "upload";//上传配置
private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; //3MB
private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; //40MB
private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; //50MB
publicFileUpload(){super();
}public void service(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException{
PrintWriter writer=response.getWriter();//检测是否为多媒体上传
if (!ServletFileUpload.isMultipartContent(request)) {//如果不是则停止
writer.println("Error: 表单必须包含 enctype=multipart/form-data...");
writer.flush();return;
}//记住要写这句话,上传的文件名才不会乱码!!!!!!!!!
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");//配置上传参数
DiskFileItemFactory factory = newDiskFileItemFactory();//设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
factory.setSizeThreshold(MEMORY_THRESHOLD);//设置临时存储目录
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload= newServletFileUpload(factory);//设置最大文件上传值
upload.setFileSizeMax(MAX_FILE_SIZE);//设置最大请求值 (包含文件和表单数据)
upload.setSizeMax(MAX_REQUEST_SIZE);//构造临时路径来存储上传的文件//这个路径相对当前应用的目录
String uploadPath = request.getContextPath() + File.separator +UPLOAD_DIRECTORY;//获取项目发布路径 下的upload文件夹
uploadPath = request.getSession().getServletContext().getRealPath("/upload");//如果目录不存在则创建
File uploadDir = newFile(uploadPath);if (!uploadDir.exists()) {
uploadDir.mkdir();
}try{//解析请求的内容提取文件数据//@SuppressWarnings("unchecked")
List formItems =upload.parseRequest(request);if (formItems != null && formItems.size() > 0) {//迭代表单数据
for(FileItem item : formItems) {//处理不在表单中的字段
if (!item.isFormField()) {//这里处理文件中文乱码没用。。。。。。。。。
System.out.println(new String(item.getName().getBytes("utf-8"),"iso-8859-1"));
String fileName= newFile(item.getName()).getName();
String filePath= uploadPath + File.separator +fileName;
File storeFile= newFile(filePath);//在控制台输出文件的上传路径
System.out.println(filePath);//保存文件到硬盘
item.write(storeFile);//注意编码,不然返回前端会乱码!!!
writer.println(new String("上传成功!".getBytes("utf-8"),"iso-8859-1"));
}
}
}
}catch(Exception ex) {
ex.printStackTrace();
}//跳转到 message.jsp,这里使用了异步上传,所以不用跳转页面//request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}