public void writeFile(FileItem fileItem, CompanyTime companyTime) throws Exception { if (fileItem != null) { /* * 1. 得到文件保存的路径 */ String root = this.getServletContext().getRealPath("/files/"); /* * 2. 生成二层目录 1). 得到文件名称 2). 得到hashCode 3). 转发成16进制 4). 获取前二个字符用来生成目录 */ String filename = fileItem.getName(); // 获取上传的文件名称 /* * 处理文件名的绝对路径问题 */ int index = filename.lastIndexOf("."); if (index != -1) { filename = filename.substring(index); } /* * 给文件名称添加uuid前缀,处理文件同名问题 */ String savename = UuidUtils.uuid() + "_" + filename; /* * 2. 获取hex的前两个字母,与root连接在一起,生成一个完整的路径 */ File dirFile = new File(root); /* * 3. 创建目录链 */ if (!dirFile.exists()) { dirFile.mkdirs(); } /* * 4. 创建目录文件 */ File destFile = new File(dirFile, savename); /* * 5. 保存 */ fileItem.write(destFile); companyTime.setXunChaJiLu(savename); } }