/** * Copyright © 2015-2020 JeePlus All rights reserved. */ package com.jeeplus.modules.sys.web; import com.google.common.collect.Lists; import com.jeeplus.common.config.Global; import com.jeeplus.common.json.AjaxJson; import com.jeeplus.common.utils.FileUtils; import com.jeeplus.common.utils.StringUtils; import com.jeeplus.core.web.BaseController; import com.jeeplus.core.web.Servlets; import com.jeeplus.modules.sys.entity.FileData; import com.jeeplus.modules.sys.entity.User; import com.jeeplus.modules.sys.security.SystemAuthorizingRealm; import com.jeeplus.modules.sys.utils.UserUtils; import org.apache.ibatis.annotations.Param; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.*; /** * 文件管理Controller * @author liugf * @version 2018-01-21 */ @Controller @RequestMapping(value = "${adminPath}/sys/file") public class FileController extends BaseController { public void init() { SystemAuthorizingRealm.Principal principal = (SystemAuthorizingRealm.Principal) UserUtils.getPrincipal(); FileUtils.createDirectory(Global.getAttachmentDir()); FileUtils.createDirectory(Global.getMyDocDir()); FileUtils.createDirectory(Global.getShareBaseDir()); } /** * 文件管理列表页面 */ @RequiresPermissions("user") @RequestMapping(value = {"list", ""}) public String list() { init(); return "modules/sys/file/fileManager"; } /** * 文件管理列表数据 */ @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "data") public List data(HttpServletRequest request, HttpServletResponse response, Model model) { SystemAuthorizingRealm.Principal principal = (SystemAuthorizingRealm.Principal) UserUtils.getPrincipal(); if (principal == null){ return null; } List targetFiles = Lists.newArrayList(); targetFiles.add(new File(Global.getAttachmentDir())); targetFiles.add(new File(Global.getMyDocDir())); targetFiles.add(new File(Global.getShareBaseDir())); return FileUtils.getFileList("files", Lists.newArrayList(targetFiles)); } /** * 移动文件或文件夹 */ @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "move") public List move(@Param("source") String source, @Param("target") String target) throws IOException{ List list = Lists.newArrayList(); String[] sourceArra = source.split(","); for(String s:sourceArra){ String fileName = StringUtils.substringAfterLast(s.replace("\\","/"),"/"); if(FileUtils.isFolder(s)){ File targetFolder = FileUtils.getAvailableFolder(target+"/"+fileName, 0); FileUtils.moveDirectory(new File(s),targetFolder); Map map = new HashMap(); map.put("id",targetFolder.getAbsolutePath()); map.put("value", targetFolder.getName()); list.add(map); }else{ File targetFile = FileUtils.getAvailableFile(target+"/"+fileName, 0); FileUtils.moveFile(new File(s), targetFile); new File(s).deleteOnExit(); Map map = new HashMap(); map.put("id",targetFile.getAbsolutePath()); map.put("value", targetFile.getName()); list.add(map); } } return list; } /** * copy文件文件夹 */ @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "copy") public List copy(@Param("source") String source, @Param("target") String target) { List list = Lists.newArrayList(); String[] sourceArra = source.split(","); for(String s:sourceArra){ String fileName = StringUtils.substringAfterLast(s.replace("\\","/"),"/"); if(FileUtils.isFolder(s)){ File targetFolder = FileUtils.getAvailableFolder(target+"/"+fileName, 0); if(FileUtils.copyDirectory(s, targetFolder.getAbsolutePath())){ Map map = new HashMap(); map.put("id",targetFolder.getAbsolutePath()); map.put("value", targetFolder.getName()); list.add(map); } }else{ File targetFile = FileUtils.getAvailableFile(target+"/"+fileName, 0); if(FileUtils.copyFile(s,targetFile.getAbsolutePath())){ Map map = new HashMap(); map.put("id",targetFile.getAbsolutePath()); map.put("value", targetFile.getName()); list.add(map); } } } return list; } /** * 删除文件管理 */ @RequiresPermissions("user") @RequestMapping(value = "download") public void download(@Param("source") String source, HttpServletRequest request, HttpServletResponse response) throws Exception{ AjaxJson j = new AjaxJson(); File file = new File(source); if (file == null || !file.exists()) { request.setAttribute("exception", new FileNotFoundException("请求的文件不存在")); request.getRequestDispatcher("/webpage/error/404.jsp").forward(request, response); } OutputStream out = null; try { response.reset(); response.setContentType("application/octet-stream; charset=utf-8"); String agent = (String)request.getHeader("USER-AGENT"); String fileName = file.getName(); if(agent != null && agent.indexOf("MSIE") == -1) { // FF String enableFileName = "=?UTF-8?B?" + (new String(Base64.getEncoder().encode(fileName.getBytes("UTF-8")))) + "?="; response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName); } else { // IE String enableFileName = new String(fileName.getBytes("GBK"), "ISO-8859-1"); response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName); } // response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); out = response.getOutputStream(); out.write(FileUtils.readFileToByteArray(file)); out.flush(); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 删除文件管理 */ @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "remove") public List delete(@Param("source") String source) { List list = Lists.newArrayList(); //先删除文件 String[] sourceArra = source.split(","); for(String s:sourceArra){ FileUtils.delFile(s); Map map = new HashMap(); map.put("id",s); map.put("value", StringUtils.substringAfterLast(s.replace("\\","/"),"/")); list.add(map); } return list; } @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "createFolder") public Map create(@Param("source") String source, @Param("target") String target) { Map map = new HashMap(); String targetFolderPath = target + "/" + source; File targetFolder = FileUtils.getAvailableFolder(targetFolderPath, 0); boolean result = FileUtils.createDirectory(targetFolder.getAbsolutePath()); if(result){ map.put("id", targetFolder.getAbsolutePath()); map.put("value", targetFolder.getName()); } return map; } @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "rename") public Map rename(@Param("source") String source, @Param("target") String target) { Map map = new HashMap(); File sourceFile = new File(source); File targetFile = new File(sourceFile.getParent()+"/"+target); if(sourceFile.isDirectory()){ targetFile = FileUtils.getAvailableFolder(targetFile.getAbsolutePath(),0); }else{ targetFile = FileUtils.getAvailableFile(targetFile.getAbsolutePath(), 0); } boolean result = sourceFile.renameTo(targetFile); if(result){ map.put("id", targetFile.getAbsolutePath()); map.put("value", targetFile.getName()); } return map; } /** * 上传文件 * @return * @throws IOException * @throws IllegalStateException */ @RequiresPermissions("user") @RequestMapping(value = "upload") @ResponseBody public Map upload( HttpServletRequest request, HttpServletResponse response,MultipartFile upload) throws IllegalStateException, IOException { User currentUser = UserUtils.getUser(); String realPath = request.getParameter("target"); Map map = new HashMap(); // 判断文件是否为空 if (!upload.isEmpty()) { // 文件保存路径 // 转存文件 FileUtils.createDirectory(realPath); String name = upload.getOriginalFilename(); String filePath = realPath +"/"+ name; File newFile = FileUtils.getAvailableFile(filePath,0); upload.transferTo(newFile); map.put("id", newFile.getAbsolutePath()); map.put("value", newFile.getName()); map.put("type", FileUtils.getFileType(newFile.getName())); } return map; } /** * 获取文件网络地址 * @return * @throws IOException * @throws IllegalStateException */ @RequiresPermissions("user") @RequestMapping(value = "getUrl") @ResponseBody public AjaxJson getUrl(@Param("dir") String dir) throws IllegalStateException, IOException { AjaxJson j = new AjaxJson(); String url = Global.transDirToUrl(dir); String type = FileUtils.getFileType(dir); // 判断文件是否为空 j.put("url", url); j.put("type",type); return j; } /** * 上传文件 * @return * @throws IOException * @throws IllegalStateException */ @RequiresPermissions("user") @RequestMapping(value = "webupload/upload") @ResponseBody public AjaxJson webupload( HttpServletRequest request, HttpServletResponse response,MultipartFile file) throws IllegalStateException, IOException { AjaxJson j = new AjaxJson(); User currentUser = UserUtils.getUser(); String uploadPath = request.getParameter("uploadPath"); Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH )+1; SystemAuthorizingRealm.Principal principal = (SystemAuthorizingRealm.Principal) UserUtils.getPrincipal(); String fileUrl = Global.getAttachmentUrl()+uploadPath+"/"+year+"/"+month+"/"; String fileDir = Global.getAttachmentDir()+uploadPath+"/"+year+"/"+month+"/"; // 判断文件是否为空 if (!file.isEmpty()) { // 文件保存路径 // 转存文件 FileUtils.createDirectory(fileDir); String name = file.getOriginalFilename(); String filePath = fileDir + name; File newFile = FileUtils.getAvailableFile(filePath,0); file.transferTo(newFile); j.put("id", newFile.getAbsolutePath()); j.put("url", fileUrl+ newFile.getName()); // Map map = new HashMap(); // map.put("fileUrl",fileDir); // HttpResponse.doPostFile2(Global.getZjjUrl()+"/upload/",map,newFile); } return j; } /** * 批量删除文件管理 */ @ResponseBody @RequiresPermissions("user") @RequestMapping(value = "webupload/delete") public AjaxJson delFile(String id) { AjaxJson j = new AjaxJson(); if(FileUtils.delFile(id)){ j.setSuccess(true); j.setMsg("删除文件成功"); }else{ j.setSuccess(false); j.setMsg("删除文件失败"); } return j; } }