|
@@ -1,14 +1,30 @@
|
|
|
package com.qmth.sop.common.util;
|
|
|
|
|
|
import com.qmth.sop.common.contant.SystemConstant;
|
|
|
+import com.qmth.sop.common.enums.ExceptionResultEnum;
|
|
|
import org.apache.commons.codec.binary.Base64;
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+import org.apache.commons.io.FileUtils;
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.*;
|
|
|
+import java.net.HttpURLConnection;
|
|
|
+import java.net.URL;
|
|
|
import java.net.URLEncoder;
|
|
|
+import java.nio.charset.Charset;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.Enumeration;
|
|
|
+import java.util.LinkedList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.zip.ZipEntry;
|
|
|
+import java.util.zip.ZipFile;
|
|
|
+import java.util.zip.ZipOutputStream;
|
|
|
|
|
|
/**
|
|
|
* @Description:
|
|
@@ -47,12 +63,494 @@ public class FileUtil {
|
|
|
deleteFile(file);
|
|
|
}
|
|
|
|
|
|
+// public static void deleteFile(File file) {
|
|
|
+// if (file.isFile() && file.exists()) {
|
|
|
+// file.delete();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public static void outputFile(HttpServletResponse response, File file, String fileName) {
|
|
|
+// try {
|
|
|
+// if (!file.exists()) {
|
|
|
+// response.sendError(404, "File not found!");
|
|
|
+// }
|
|
|
+//
|
|
|
+// BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
|
|
|
+// String fName = URLEncoder.encode(fileName, SystemConstant.CHARSET_NAME);
|
|
|
+//
|
|
|
+// response.reset();
|
|
|
+// response.setContentType("application/x-msdownload");
|
|
|
+// response.setHeader("Content-Disposition", "attachment; filename=" + fName);
|
|
|
+// IOUtils.copy(br, response.getOutputStream());
|
|
|
+// br.close();
|
|
|
+//// outStream.close();
|
|
|
+// } catch (IOException e) {
|
|
|
+// log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将网络文件保存到本地
|
|
|
+ *
|
|
|
+ * @param fileUrl 网络文件URL
|
|
|
+ * @param localFilePath 例如D:/123.txt
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static void saveUrlAsFile(String fileUrl, String localFilePath) {
|
|
|
+ HttpURLConnection connection = null;
|
|
|
+ DataOutputStream dataOutputStream = null;
|
|
|
+ DataInputStream dataInputStream = null;
|
|
|
+ try {
|
|
|
+ URL url = new URL(fileUrl);
|
|
|
+
|
|
|
+ connection = (HttpURLConnection) url.openConnection();
|
|
|
+
|
|
|
+ dataInputStream = new DataInputStream(connection.getInputStream());
|
|
|
+ FileOutputStream fileOutputStream = new FileOutputStream(localFilePath);
|
|
|
+ dataOutputStream = new DataOutputStream(fileOutputStream);
|
|
|
+
|
|
|
+ byte[] buffer = new byte[4096];
|
|
|
+ int count;
|
|
|
+ while ((count = dataInputStream.read(buffer)) > 0) {
|
|
|
+ dataOutputStream.write(buffer, 0, count);
|
|
|
+ }
|
|
|
+ fileOutputStream.flush();
|
|
|
+ dataOutputStream.flush();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("下载文件出错" + e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (connection != null) {
|
|
|
+ connection.disconnect();
|
|
|
+ }
|
|
|
+ if (dataOutputStream != null) {
|
|
|
+ try {
|
|
|
+ dataOutputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (dataInputStream != null) {
|
|
|
+ try {
|
|
|
+ dataInputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将网络文件保存到本地
|
|
|
+ *
|
|
|
+ * @param fileUrl 网络文件URL
|
|
|
+ * @param localFile 本地文件对象
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static void saveUrlAsFile(String fileUrl, File localFile) {
|
|
|
+ saveUrlAsFile(fileUrl, localFile.getAbsolutePath());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 读取文件内容
|
|
|
+ *
|
|
|
+ * @param file
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static String readFileContent(File file) {
|
|
|
+ StringBuilder content = new StringBuilder();
|
|
|
+ InputStreamReader streamReader = null;
|
|
|
+ BufferedReader bufferedReader = null;
|
|
|
+ try {
|
|
|
+ String encoding = SystemConstant.CHARSET_NAME;
|
|
|
+ if (file.exists() && file.isFile()) {
|
|
|
+ streamReader = new InputStreamReader(new FileInputStream(file), encoding);
|
|
|
+ bufferedReader = new BufferedReader(streamReader);
|
|
|
+ String line;
|
|
|
+ while ((line = bufferedReader.readLine()) != null) {
|
|
|
+ content.append(line);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("读取文件出错" + e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (streamReader != null) {
|
|
|
+ try {
|
|
|
+ streamReader.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (bufferedReader != null) {
|
|
|
+ try {
|
|
|
+ bufferedReader.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return content.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建文件目录
|
|
|
+ */
|
|
|
+ public static boolean makeDirs(String path) {
|
|
|
+ if (path == null || "".equals(path)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ File folder = new File(path);
|
|
|
+ if (!folder.exists()) {
|
|
|
+ return folder.mkdirs();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void saveAsFile(String path, String content, Charset encoding) {
|
|
|
+ if (path == null || content == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (encoding == null) {
|
|
|
+ encoding = StandardCharsets.UTF_8;
|
|
|
+ }
|
|
|
+ BufferedWriter bw = null;
|
|
|
+ try {
|
|
|
+ File file = new File(path);
|
|
|
+ if (!file.exists()) {
|
|
|
+ if (makeDirs(file.getParent())) {
|
|
|
+ boolean ok = file.createNewFile();
|
|
|
+ if (!ok) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("文件创建失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ IOUtils.write(content.getBytes(encoding), new FileOutputStream(file));
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("保存文件出错" + e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (bw != null) {
|
|
|
+ try {
|
|
|
+ bw.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解压文件
|
|
|
+ *
|
|
|
+ * @param targetDir 解压目录
|
|
|
+ * @param zipFile 待解压的ZIP文件
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static List<File> unZip(File targetDir, File zipFile) throws IOException {
|
|
|
+ if (targetDir == null) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("解压目录不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (zipFile == null) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("待解压的文件不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!zipFile.exists()) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("待解压的文件不存在!" + zipFile.getAbsolutePath());
|
|
|
+ }
|
|
|
+
|
|
|
+ String zipName = zipFile.getName().toLowerCase();
|
|
|
+ if (zipFile.isDirectory() || zipName.indexOf(SystemConstant.ZIP_PREFIX) < 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("待解压的文件格式错误!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!targetDir.exists()) {
|
|
|
+ targetDir.mkdir();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<File> result = new LinkedList<>();
|
|
|
+
|
|
|
+ try (ZipFile zip = new ZipFile(zipFile, StandardCharsets.UTF_8);) {
|
|
|
+
|
|
|
+ Enumeration entries = zip.entries();
|
|
|
+ while (entries.hasMoreElements()) {
|
|
|
+ ZipEntry entry = (ZipEntry) entries.nextElement();
|
|
|
+
|
|
|
+ // Linux中需要替换掉路径的反斜杠
|
|
|
+ String entryName = replaceSplit((File.separator + entry.getName()));
|
|
|
+
|
|
|
+ String filePath = targetDir.getAbsolutePath() + entryName;
|
|
|
+ File target = new File(filePath);
|
|
|
+ if (entry.isDirectory()) {
|
|
|
+ target.mkdirs();
|
|
|
+ } else {
|
|
|
+ File dir = target.getParentFile();
|
|
|
+ if (!dir.exists()) {
|
|
|
+ dir.mkdirs();
|
|
|
+ }
|
|
|
+
|
|
|
+ try (OutputStream os = new FileOutputStream(target); InputStream is = zip.getInputStream(entry);) {
|
|
|
+ IOUtils.copy(is, os);
|
|
|
+ os.flush();
|
|
|
+ }
|
|
|
+ result.add(target);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 文件压缩
|
|
|
+ *
|
|
|
+ * @param target 目录或文件 @param zipFile 压缩后的ZIP文件 @throws IOException @throws
|
|
|
+ */
|
|
|
+ public static boolean doZip(File target, File zipFile) throws IOException {
|
|
|
+ if (target == null || !target.exists()) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("目录或文件不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (zipFile == null) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("待压缩的文件不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ try (OutputStream outStream = new FileOutputStream(zipFile);
|
|
|
+ ZipOutputStream zipOutStream = new ZipOutputStream(outStream, StandardCharsets.UTF_8);) {
|
|
|
+ if (!zipFile.exists()) {
|
|
|
+ boolean ok = zipFile.createNewFile();
|
|
|
+ if (!ok) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("压缩的文件创建失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (target.isDirectory()) {
|
|
|
+ File[] files = target.listFiles();
|
|
|
+ if (files.length == 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("文件夹内未找到任何文件!");
|
|
|
+ }
|
|
|
+
|
|
|
+ for (File file : files) {
|
|
|
+ doZip(zipOutStream, file, null);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ doZip(zipOutStream, target, null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param resultFile
|
|
|
+ * @param sourseFiles
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static boolean doZip(File resultFile, List<File> sourseFiles) {
|
|
|
+ if (sourseFiles == null || sourseFiles.size() == 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("待压缩的文件不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (resultFile == null) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("压缩后的文件不能为空!");
|
|
|
+ }
|
|
|
+ ZipOutputStream zipOutStream = null;
|
|
|
+ try {
|
|
|
+ OutputStream outStream = new FileOutputStream(resultFile);
|
|
|
+ zipOutStream = new ZipOutputStream(outStream, StandardCharsets.UTF_8);
|
|
|
+ if (!resultFile.exists()) {
|
|
|
+ boolean ok = resultFile.createNewFile();
|
|
|
+ if (!ok) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("压缩的文件创建失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (File file : sourseFiles) {
|
|
|
+ doZip(zipOutStream, file, null);
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("压缩的文件创建失败!" + e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (zipOutStream != null) {
|
|
|
+ try {
|
|
|
+ zipOutStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void doZip(ZipOutputStream zipOutStream, File target, String parentDir) throws IOException {
|
|
|
+ if (parentDir == null) {
|
|
|
+ parentDir = "";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"".equals(parentDir) && !parentDir.endsWith(File.separator)) {
|
|
|
+ parentDir += File.separator;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (target.isDirectory()) {
|
|
|
+ File[] files = target.listFiles();
|
|
|
+ if (files.length > 0) {
|
|
|
+ for (File file : files) {
|
|
|
+ doZip(zipOutStream, file, parentDir + target.getName());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ zipOutStream.putNextEntry(new ZipEntry(parentDir + target.getName()));
|
|
|
+ zipOutStream.closeEntry();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ try (InputStream is = new FileInputStream(target);) {
|
|
|
+ zipOutStream.putNextEntry(new ZipEntry(parentDir + target.getName()));
|
|
|
+ int len;
|
|
|
+ byte[] bytes = new byte[1024];
|
|
|
+ while ((len = is.read(bytes)) > 0) {
|
|
|
+ zipOutStream.write(bytes, 0, len);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ zipOutStream.closeEntry();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void deleteFolder(String path) {
|
|
|
+
|
|
|
+ File file = new File(path);
|
|
|
+ if (file.exists()) {
|
|
|
+ if (file.isFile()) {
|
|
|
+ deleteFile(path);
|
|
|
+ } else {
|
|
|
+ deleteDirectory(path);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// public static void deleteFile(String path) {
|
|
|
+// File file = new File(path);
|
|
|
+// deleteFile(file);
|
|
|
+// }
|
|
|
+
|
|
|
public static void deleteFile(File file) {
|
|
|
if (file.isFile() && file.exists()) {
|
|
|
file.delete();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static void deleteDirectory(File dirFile) {
|
|
|
+ if (!dirFile.exists() || !dirFile.isDirectory()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ File[] files = dirFile.listFiles();
|
|
|
+ if (files != null) {
|
|
|
+ for (int i = 0; i < files.length; i++) {
|
|
|
+ if (files[i].isFile()) {
|
|
|
+ deleteFile(files[i]);
|
|
|
+ } else {
|
|
|
+ deleteDirectory(files[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dirFile.delete();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void deleteDirectory(String path) {
|
|
|
+ if (!path.endsWith(File.separator)) {
|
|
|
+ path = path + File.separator;
|
|
|
+ }
|
|
|
+ File dirFile = new File(path);
|
|
|
+ deleteDirectory(dirFile);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 文件转数组
|
|
|
+ *
|
|
|
+ * @param file
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static byte[] fileConvertToByteArray(File file) throws IOException {
|
|
|
+ byte[] data = null;
|
|
|
+ FileInputStream fis = null;
|
|
|
+ ByteArrayOutputStream baos = null;
|
|
|
+ try {
|
|
|
+ fis = new FileInputStream(file);
|
|
|
+ baos = new ByteArrayOutputStream();
|
|
|
+ int len;
|
|
|
+ byte[] buffer = new byte[1024];
|
|
|
+ while ((len = fis.read(buffer)) != -1) {
|
|
|
+ baos.write(buffer, 0, len);
|
|
|
+ }
|
|
|
+ data = baos.toByteArray();
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ } finally {
|
|
|
+ if (Objects.nonNull(fis)) {
|
|
|
+ fis.close();
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(baos)) {
|
|
|
+ baos.flush();
|
|
|
+ baos.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static File multipartFileToFile(MultipartFile file) throws Exception {
|
|
|
+
|
|
|
+ File toFile = null;
|
|
|
+ if (file.equals("") || file.getSize() <= 0) {
|
|
|
+ file = null;
|
|
|
+ } else {
|
|
|
+ InputStream ins = null;
|
|
|
+ ins = file.getInputStream();
|
|
|
+ toFile = new File(file.getOriginalFilename());
|
|
|
+ inputStreamToFile(ins, toFile);
|
|
|
+ ins.close();
|
|
|
+ }
|
|
|
+ return toFile;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取流文件
|
|
|
+ private static void inputStreamToFile(InputStream ins, File file) {
|
|
|
+ try {
|
|
|
+ OutputStream os = new FileOutputStream(file);
|
|
|
+ int bytesRead = 0;
|
|
|
+ byte[] buffer = new byte[8192];
|
|
|
+ while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
|
|
|
+ os.write(buffer, 0, bytesRead);
|
|
|
+ }
|
|
|
+ os.close();
|
|
|
+ ins.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 复制文件
|
|
|
+ *
|
|
|
+ * @param sourceFileName 源文件
|
|
|
+ * @param destFileName 目标文件
|
|
|
+ */
|
|
|
+ public static void copyFile(String sourceFileName, String destFileName) {
|
|
|
+ try {
|
|
|
+ File sourceFile = new File(sourceFileName);
|
|
|
+ if (!sourceFile.exists()) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("源文件" + sourceFileName + "不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ File desFile = new File(destFileName);
|
|
|
+ if (!desFile.exists()) {
|
|
|
+ desFile.getParentFile().mkdirs(); //目标文件目录不存在的话需要创建目录
|
|
|
+ desFile.createNewFile();
|
|
|
+ }
|
|
|
+
|
|
|
+ FileUtils.copyFile(sourceFile, desFile);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public static void outputFile(HttpServletResponse response, File file, String fileName) {
|
|
|
try {
|
|
|
if (!file.exists()) {
|
|
@@ -72,4 +570,187 @@ public class FileUtil {
|
|
|
log.error(SystemConstant.LOG_ERROR, e);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public static void outputFile(HttpServletResponse response, InputStream inputStream, String fileName) {
|
|
|
+ try {
|
|
|
+ BufferedInputStream br = new BufferedInputStream(inputStream);
|
|
|
+ fileName = fileName.replaceAll("/", "\\\\");
|
|
|
+ String fName = URLEncoder.encode(fileName, SystemConstant.CHARSET_NAME);
|
|
|
+
|
|
|
+ response.reset();
|
|
|
+ response.setContentType("application/x-msdownload");
|
|
|
+ response.setHeader("Content-Disposition", "attachment; filename=" + fName);
|
|
|
+ IOUtils.copy(br, response.getOutputStream());
|
|
|
+ br.close();
|
|
|
+ // outStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static InputStream getStream(String path) {
|
|
|
+ try {
|
|
|
+ ClassLoader classLoader = FileUtil.class.getClassLoader();
|
|
|
+ URL url = classLoader.getResource(path);
|
|
|
+ return url.openStream();
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将路径中的双"//"替换成单"/"
|
|
|
+ *
|
|
|
+ * @param path 文件路径
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public static String replaceSplit(String path) {
|
|
|
+ return path.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String md5File(File file) {
|
|
|
+ try {
|
|
|
+ return md5File(new FileInputStream(file));
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String md5File(InputStream inputStream) {
|
|
|
+ try {
|
|
|
+ return DigestUtils.md5Hex(inputStream);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取临时文件根目录
|
|
|
+ *
|
|
|
+ * @param containNanoId 是否使用NanoId创建子目录
|
|
|
+ * @return 文件路径
|
|
|
+ */
|
|
|
+ public static String getFileTempDirPath(Boolean containNanoId) {
|
|
|
+ File fileTmpDir;
|
|
|
+ try {
|
|
|
+ if (containNanoId) {
|
|
|
+ fileTmpDir = new File(System.getProperty(SystemConstant.TMP_DIR), SystemConstant.getNanoId());
|
|
|
+ } else {
|
|
|
+ fileTmpDir = new File(System.getProperty(SystemConstant.TMP_DIR));
|
|
|
+ }
|
|
|
+ if (!fileTmpDir.exists()) {
|
|
|
+ fileTmpDir.mkdirs();
|
|
|
+ }
|
|
|
+ log.info("getFileTempDirPath_path:{}", fileTmpDir.getPath());
|
|
|
+ return fileTmpDir.getPath();
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成文本文件
|
|
|
+ *
|
|
|
+ * @param file 目标文件
|
|
|
+ * @param content 文件内容
|
|
|
+ */
|
|
|
+ public static File writeContent(File file, String content) {
|
|
|
+ try {
|
|
|
+ if (!file.exists()) {
|
|
|
+ file.getParentFile().mkdirs();
|
|
|
+ file.createNewFile();
|
|
|
+ }
|
|
|
+ IOUtils.write(content.getBytes(StandardCharsets.UTF_8), new FileOutputStream(file));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ }
|
|
|
+ return file;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下载加密zip文件
|
|
|
+ *
|
|
|
+ * @param response response
|
|
|
+ * @param downloadPathFile 压缩文件所在文件夹路径
|
|
|
+ * @param zipFileName 压缩zip文件路径+文件名
|
|
|
+ */
|
|
|
+ public static void downloadEncryptZip(HttpServletResponse response, File downloadPathFile, String zipFileName, String password) {
|
|
|
+ if (StringUtils.isBlank(password)) {
|
|
|
+ password = SystemConstant.ZIP_ENCRYPT_PWD;
|
|
|
+ }
|
|
|
+ // 压缩zip文件和图片保存文件夹放在同一级
|
|
|
+ File zipFile = new File(downloadPathFile.getParent(), zipFileName);
|
|
|
+ try {
|
|
|
+ // 压缩zip文件路径+文件名
|
|
|
+ String zipFilePath = zipFile.getPath();
|
|
|
+ // 待压缩文件所在文件夹
|
|
|
+ String zipFilesPath = downloadPathFile.getPath();
|
|
|
+ Zip4jUtil.zipEncryptFile(zipFilePath, zipFilesPath, password);
|
|
|
+ FileUtil.outputFile(response, zipFile, zipFile.getName());
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("下载失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下载加密zip文件
|
|
|
+ *
|
|
|
+ * @param downloadPathFile 压缩文件所在文件夹路径
|
|
|
+ * @param zipFileName 压缩zip文件路径+文件名
|
|
|
+ */
|
|
|
+ public static void downloadEncryptZip(File downloadPathFile, String zipFileName, String password) {
|
|
|
+ if (StringUtils.isBlank(password)) {
|
|
|
+ password = SystemConstant.ZIP_ENCRYPT_PWD;
|
|
|
+ }
|
|
|
+ // 压缩zip文件和图片保存文件夹放在同一级
|
|
|
+ File zipFile = new File(downloadPathFile.getParent(), zipFileName);
|
|
|
+ try {
|
|
|
+ // 压缩zip文件路径+文件名
|
|
|
+ String zipFilePath = zipFile.getPath();
|
|
|
+ // 待压缩文件所在文件夹
|
|
|
+ String zipFilesPath = downloadPathFile.getPath();
|
|
|
+ Zip4jUtil.zipEncryptFile(zipFilePath, zipFilesPath, password);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("下载失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// /**
|
|
|
+// * @param zipLocalRootPath
|
|
|
+// * @param zipDirName
|
|
|
+// * @param password
|
|
|
+// * @return
|
|
|
+// * @throws Exception
|
|
|
+// */
|
|
|
+// public static JSONObject uploadEncryptZip(String zipLocalRootPath, String zipDirName, String password) throws Exception {
|
|
|
+// if (StringUtils.isBlank(password)) {
|
|
|
+// password = SystemConstant.ZIP_ENCRYPT_PWD;
|
|
|
+// }
|
|
|
+//
|
|
|
+// File zipFile = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
|
|
|
+//
|
|
|
+// try {
|
|
|
+// FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
|
|
|
+// DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
|
|
|
+// Zip4jUtil.zipEncryptFile(zipFile.getPath(), zipLocalRootPath, password);
|
|
|
+//
|
|
|
+// boolean oss = dictionaryConfig.sysDomain().isOss();
|
|
|
+// JSONObject jsonObject = new JSONObject();
|
|
|
+// jsonObject.put(SystemConstant.PATH, zipDirName);
|
|
|
+// String zipFileMd5 = DigestUtils.md5Hex(new FileInputStream(zipFile));
|
|
|
+// if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
|
|
|
+// fileStoreUtil.ossUpload(zipDirName, zipFile, zipFileMd5, fileStoreUtil.getUploadEnumByPath(zipDirName).getFssType());
|
|
|
+// jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
|
|
|
+// } else {
|
|
|
+// fileStoreUtil.localUpload(zipDirName, new FileInputStream(zipFile), zipFileMd5, LocalCatalogEnum.LOCAL_FILE);
|
|
|
+// jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
|
|
|
+// }
|
|
|
+// jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
|
|
|
+// return jsonObject;
|
|
|
+// } catch (Exception e) {
|
|
|
+// throw new RuntimeException(e);
|
|
|
+// } finally {
|
|
|
+// FileUtil.deleteFile(zipFile);
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|