package com.fjy.spring.controller; import com.fjy.spring.domain.TbFile; import com.fjy.spring.domain.TbLog; import com.fjy.spring.domain.TbUser; import com.fjy.spring.enums.ResultEnum; import com.fjy.spring.exception.UserException; import com.fjy.spring.service.FileService; import com.fjy.spring.service.LogService; import com.fjy.spring.untils.FtpOperationUtil; import com.fjy.spring.untils.GetIPAddrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import static com.fjy.spring.constant.GlobalConstant.USER_SESSION_KEY; @Controller @Slf4j public class DeleteController { /** * 文件相关数据库操作 */ @Autowired private FileService fileService; @Autowired private LogService logService; @Resource HttpServletRequest request; @GetMapping("/home/findfile") @ResponseBody public String findFilePath(@RequestParam(value = "fileid") Integer fileid) { TbFile tbFile = new TbFile(); tbFile.setColfileid(fileid); TbFile resfile = fileService.findFileById(tbFile); return resfile.getColfilepath(); } /** * 删除文件,可以是文件或文件夹 */ @RequestMapping("/home/filedelete") @ResponseBody public boolean delete(@RequestParam(value = "fileid") Integer fileid) throws Exception { TbFile tbFile = new TbFile(); tbFile.setColfileid(fileid); TbFile resfile = fileService.findFileById(tbFile); File filepath = new File(resfile.getColfilepath()); return deleteFTPFile(resfile); } /** * 删除单个文件 */ public boolean deleteFile(String fileName, Integer fileid) { File file = new File(fileName); TbFile tbFile = new TbFile(); tbFile.setColfileid(fileid); // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 if (file.exists() && file.isFile()) { try { FtpOperationUtil ftpOperationUtil = new FtpOperationUtil(); ftpOperationUtil.connectServer(); System.out.println("【fileName】" + fileName); boolean flagExistsFile = ftpOperationUtil.isExistsFile(fileName, tbFile.getColfilename()); if (flagExistsFile) { boolean flagDeleteFile = ftpOperationUtil.deleteFile(fileName); System.out.println("【flagDeleteFile】" + flagDeleteFile); } } catch (IOException e) { e.printStackTrace(); } if (file.delete()) { fileService.deleteFileById(tbFile); log.info("删除单个文件" + fileName + "成功!"); TbUser user = (TbUser) request.getSession().getAttribute(USER_SESSION_KEY); //写入日志信息 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateNowStr = sdf.format(date); TbLog log = new TbLog(); log.setUserid(user.getColuserid()); log.setColtime(dateNowStr); log.setColheader("删除单个文件" + fileName + "成功!"); log.setRequestURL(request.getRequestURL().toString()); //解决nginx代理后IP地址获取问题 log.setColip(GetIPAddrUtil.getIpAddr(request)); logService.addLogRec(log); return true; } else { log.info("删除单个文件" + fileName + "失败!"); return false; } } else { log.info("删除单个文件失败:" + fileName + "不存在!"); return false; } } public boolean deleteFTPFile(TbFile tbFile) { tbFile.setColfileid(tbFile.getColfileid()); String path = "/upload/" + tbFile.getCourseName() + "/" + tbFile.getWorkFolder() + "/"; FtpOperationUtil ftpOperationUtil = new FtpOperationUtil(); boolean flagExistsFile = false; boolean flagDeleteFile = false; try { ftpOperationUtil.connectServer(); flagExistsFile = ftpOperationUtil.isExistsFile(path, tbFile.getColfilename()); } catch (IOException e) { e.printStackTrace(); } // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 if (flagExistsFile) { System.out.println("【path】" + path); if (flagExistsFile) { try { flagDeleteFile = ftpOperationUtil.deleteFile(path + tbFile.getColfilename()); } catch (IOException e) { e.printStackTrace(); } System.out.println("【flagDeleteFile】" + flagDeleteFile); } if (flagDeleteFile) { fileService.deleteFileById(tbFile); log.info("删除单个文件" + path + "成功!"); TbUser user = (TbUser) request.getSession().getAttribute(USER_SESSION_KEY); //写入日志信息 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateNowStr = sdf.format(date); TbLog log = new TbLog(); log.setUserid(user.getColuserid()); log.setColtime(dateNowStr); log.setColheader("删除单个文件" + path + "成功!"); log.setRequestURL(request.getRequestURL().toString()); //解决nginx代理后IP地址获取问题 log.setColip(GetIPAddrUtil.getIpAddr(request)); logService.addLogRec(log); return true; } else { log.info("删除单个文件" + path + "失败!"); return false; } } else { log.info("删除单个文件失败:" + path + tbFile.getColfilename() + "不存在!"); return false; } } /** * 删除目录及目录下的文件 * 功能暂时不开放 * * @param path 要删除的目录的文件路径 * @return 目录删除成功返回true,否则返回false */ public boolean deleteDirectory(String path) { /*// 如果dir不以文件分隔符结尾,自动添加文件分隔符 if (!dir.endsWith(File.separator)) dir = dir + File.separator; File dirFile = new File(dir); // 如果dir对应的文件不存在,或者不是一个目录,则退出 if ((!dirFile.exists()) || (!dirFile.isDirectory())) { System.out.println("删除目录失败:" + dir + "不存在!"); return false; } boolean flag = true; // 删除文件夹中的所有文件包括子目录 File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) { // 删除子文件 if (files[i].isFile()) { TbFile tbFile = new TbFile(); tbFile.setColfilename(files[i].getName()); fileService.deleteFileById(tbFile); flag = deleteFile(files[i].getAbsolutePath()); if (!flag) break; } // 删除子目录 else if (files[i].isDirectory()) { flag = deleteDirectory(files[i] .getAbsolutePath()); if (!flag) break; } } if (!flag) { System.out.println("删除目录失败!"); return false; } // 删除当前目录 if (dirFile.delete()) { System.out.println("删除目录" + dir + "成功!"); return true; } else { return false; }*/ /*File dir=new File(path); if(dir.exists()){ File[] tmp=dir.listFiles(); for(int i=0;i