1.设置乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
2.获取请求的数
String username=request.getParameter("username");
Part part= request.getPart("file1");
3.获取文件上传路径 (真实路径)
String uploadPath= request.getServletContext().getRealPath("/WEB-INF/upload");
File file=new File(uploadPath);
if (!file.exists()){
file.mkdirs();//新建文件夹
}
4.文件上传
//生成唯一文件名
String oldName= part.getSubmittedFileName();
List<String> nameList=new ArrayList<>();
nameList.add(".jpg");
nameList.add(".doc");
nameList.add(".exe");
nameList.add(".jar");
String extName=oldName.substring(oldName.lastIndexOf("."));
if (!nameList.contains(extName)){
response.getWriter().println(oldName+"不符合文件上传规则");
return;
}
String newName= UploadUtils.newFileName(oldName);
//生成二级三级目录 实现散列存储
String newPath= UploadUtils.newFilePath(uploadPath,oldName);
part.write(newPath+"\\"+newName);
5.响应客户端上传成功
response.getWriter().println(part.getSubmittedFileName()+"上传成功");
工具类
UploadUtils.java
public static String newFileName(String filename){
return UUID.randomUUID().toString().replaceAll("-","")+"_"+filename;
}
//生成二级三级目录
public static String newFilePath(String basepath,String filename){
int hashCode=filename.hashCode();
int path1=hashCode & 15;//二级目录 与运算 0-15
int path2=(hashCode>>4)&15;//三级目录 0-15
String newPath=basepath+"\\"+path1+"\\"+path2;
File file=new File(newPath);
if (!file.exists()){
file.mkdirs();
}
return newPath;
}