| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.api.vo.FileUploadResult; |
| | | import org.jeecg.common.exception.ExceptionCast; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.*; |
| | | import java.net.URLEncoder; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Paths; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | @Slf4j |
| | | public class FileUtil { |
| | | |
| | | private static String fileUploadFolder; |
| | |
| | | return dto; |
| | | } |
| | | |
| | | public static FileUploadResult uploadFile(byte[] fileData, String fileName) { |
| | | String suffix = getFileSuffix(fileName); |
| | | Date currentDate = DateUtils.getDate(); |
| | | String monthStr = DateUtils.date2Str(currentDate, DateUtils.monthFormat.get()); |
| | | // 相对路径 |
| | | String relativePath = "/" + monthStr + "/" + DateUtils.getDayStr(currentDate) + "/"; |
| | | // 绝对路径 |
| | | String absolutePath = fileUploadFolder + "/" + monthStr + "/" + DateUtils.getDayStr(currentDate) + "/"; |
| | | String fileNameNonSuffix = getFilenameNonSuffix(fileName); |
| | | if (StringUtils.isBlank(fileNameNonSuffix)) { |
| | | return null; |
| | | } |
| | | // 获取文件加密名称 1 保证文件唯一 不存在覆盖问题 2 目录下保存文件加密名称 去除文件关键信息 |
| | | String encodeFileName = SHA256Util.getSHA256Str(fileNameNonSuffix + System.currentTimeMillis()) + "." + suffix; |
| | | Long fileSize = (long) fileData.length; |
| | | try { |
| | | File targetFile = new File(absolutePath, encodeFileName); |
| | | if(!targetFile.getParentFile().exists()) { |
| | | //创建目录 |
| | | targetFile.getParentFile().mkdirs(); |
| | | } |
| | | Files.write(Paths.get(absolutePath + encodeFileName), fileData); |
| | | FileUploadResult dto = new FileUploadResult(); |
| | | dto.setFileName(fileNameNonSuffix); |
| | | dto.setFileEncodeName(encodeFileName); |
| | | dto.setFilePath(relativePath + encodeFileName); |
| | | dto.setFileSize(fileSize); |
| | | dto.setFileSuffix(suffix); |
| | | return dto; |
| | | } catch (IOException e) { |
| | | log.error("文件写入失败: {}", e.getMessage(), e); |
| | | return null; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param filePath 路径 |
| | | * @param fileName 文件名 |
| | |
| | | } |
| | | } |
| | | |
| | | public static void downLoadFile(HttpServletResponse response, String filePath, String toFileName) { |
| | | String absolutePath = fileUploadFolder + filePath; |
| | | File file = new File(absolutePath); |
| | | if (file.exists()) { |
| | | byte[] buffer = new byte[1024]; |
| | | FileInputStream fis = null; |
| | | BufferedInputStream bis = null; |
| | | try { |
| | | response.setHeader("Content-Type", "application/octet-stream;charset=utf-8"); // 告诉浏览器输出内容为流 |
| | | // response.setHeader("Content-Disposition", "attachment;fileName="+ new |
| | | // String(toFileName.getBytes("UTF-8"),"ISO-8859-1")); |
| | | response.setHeader("Content-Disposition", |
| | | "attachment;fileName=" + URLEncoder.encode(toFileName, "UTF-8")); |
| | | fis = new FileInputStream(file); |
| | | bis = new BufferedInputStream(fis); |
| | | OutputStream os = response.getOutputStream(); |
| | | int i = bis.read(buffer); |
| | | while (i != -1) { |
| | | os.write(buffer, 0, i); |
| | | i = bis.read(buffer); |
| | | } |
| | | os.flush(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (bis != null) { |
| | | try { |
| | | bis.close(); |
| | | } catch (IOException e) { |
| | | } |
| | | } |
| | | if (fis != null) { |
| | | try { |
| | | fis.close(); |
| | | } catch (IOException e) { |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | ExceptionCast.cast("文件不存在"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 上传文件工具类 |
| | | * |