package tech.powerjob.server.common.utils; import tech.powerjob.common.utils.CommonUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.util.DigestUtils; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; /** * 文件工具类,统一文件存放地址 * * @author tjq * @since 2020/5/15 */ public class OmsFileUtils { private static final String USER_HOME = System.getProperty("user.home", "oms"); private static final String COMMON_PATH = USER_HOME + "/powerjob/server/"; /** * 获取在线日志的存放路径 * @return 在线日志的存放路径 */ public static String genLogDirPath() { return COMMON_PATH + "online_log/"; } /** * 获取用于构建容器的 jar 文件存放路径 * @return 路径 */ public static String genContainerJarPath() { return COMMON_PATH + "container/"; } /** * 获取临时目录(固定目录) * @return 目录 */ public static String genTemporaryPath() { return COMMON_PATH + "temporary/"; } /** * 获取临时目录(随机目录,不会重复),用完记得删除 * @return 临时目录 */ public static String genTemporaryWorkPath() { return genTemporaryPath() + CommonUtils.genUUID() + "/"; } /** * 获取 H2 数据库工作目录 * @return H2 工作目录 */ public static String genH2BasePath() { return COMMON_PATH + "h2/"; } public static String genH2WorkPath() { return genH2BasePath() + CommonUtils.genUUID() + "/"; } /** * 将文本写入文件 * @param content 文本内容 * @param file 文件 */ public static void string2File(String content, File file) { try(FileWriter fw = new FileWriter(file)) { fw.write(content); }catch (IOException ie) { ExceptionUtils.rethrow(ie); } } /** * 输出文件(对外下载功能) * @param file 文件 * @param response HTTP响应 * @throws IOException 异常 */ public static void file2HttpResponse(File file, HttpServletResponse response) throws IOException { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8")); byte[] buffer = new byte[4096]; try (BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { while (bis.read(buffer) != -1) { bos.write(buffer); } } } /** * 计算文件的 MD5 * @param f 文件 * @return md5 * @throws IOException 异常 */ public static String md5(File f) throws IOException { String md5; try(FileInputStream fis = new FileInputStream(f)) { md5 = DigestUtils.md5DigestAsHex(fis); } return md5; } }