public class FileUtil {
public static void upload(HttpServletRequest request) {
//解析和检查请求:请求方式是否是POST,请求编码是否是multipart/form-data
boolean isMultipart =ServletFileUpload.isMultipartContent(request);
if(!isMultipart) {
return; //结束,不运行后面的
}
try {
//1.创建FileItemFactory对象
//FileItemFactory是用来创建FileItem对象的
//FileItem对象:form表单中的表单控件的封装
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setSizeThreshold(20*2014); //20kb
//2.创建文件上传处理器
ServletFileUpload upload=new ServletFileUpload(factory);
//解决上传表单乱码问题
upload.setHeaderEncoding("utf-8");
//3.解析请求
List<FileItem> items=upload.parseRequest(request);
//4.迭代出每一个FileItem
for(FileItem item:items) {
String fieldName=item.getFieldName();//获取表单控件的name属性值(参数名)
if(item.isFormField()) {
//普通的表单控件
String value=item.getString("utf-8");
System.out.println(fieldName+"-"+value);
}else {
//表单上传控件
//----------------------------------------------
String mimeType=request.getSession().getServletContext().getMimeType(item.getName());
//当前上传文件的类型不在图片允许的格式之内
if(!mimeType.contains("image")) {
throw new LogicException("请上传图片文件");
}
System.out.println(fieldName+"-"+item.getName());
String fileName=UUID.randomUUID().toString()+"."+
FilenameUtils.getExtension(item.getName());
String dir="C:\\Users\\陈曼\\eclipse-workspace3\\product-crud\\WebContent\\upload";
item.write(new File(dir,fileName));//把二进制数据写到哪一个文件中
}
}
}catch(LogicException e) {
throw e; //继续抛出异常给调用者
}
catch(Exception e){
e.printStackTrace();
}
}
}
Util类里用异常来和Servlet传递信息
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try{
FileUtil.upload(req);
}catch(LogicException e) {
String error=e.getMessage(); //获取异常信息
req.setAttribute("errorMassage",error);
req.getRequestDispatcher("upload.jsp").forward(req, resp);
}
}
public class LogicException extends RuntimeException{
private static final long serialVersionUID = 1L;
public LogicException(String message, Throwable cause) {
super(message, cause);
}
public LogicException(String message) {
super(message);
}
}