package com.zcloud.util; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import org.springframework.web.multipart.MultipartFile; /** * 文件上传工具类 * 变更文件上传方式,原上传方式可能会导致附件丢失 * 修改后逻辑:点击上传 -> 调后端接口返回临时文件路径 -> 提交-> 临时文件拷贝到正式,保存正式文件地址 -> 定期清空临时文件 * @date 2024-9-10 * @author hyx * @version V1.0 */ public class FileUploadUtil { private final static String PATH_PREFIX = "/mnt/vdc1/qask/file"; //服务器路径前缀 private final static String TEMPORARY_FILE_PATH = "/uploadFiles/linshi/"; //临时文件储存路径 private final static String PRODUCT_FILE_PATH = "/uploadFiles/yhtp/"; //正式文件储存路径 /** * 上传文件到服务器临时地址 * * @param file 文件 * @param CORPINFO_ID 企业id * @return 文件临时路径 * @throws Exception * @date 2024-9-10 * @author hyx */ public static String uploadTemporaryFile(MultipartFile file,String CORPINFO_ID) throws Exception { String ffile = DateUtil.getDays(); String fileName = UuidUtil.get32UUID()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); try { Smb.sshSftp(file,fileName,TEMPORARY_FILE_PATH + CORPINFO_ID + "/" + ffile); } catch (Exception e) { throw new RuntimeException(e); } return TEMPORARY_FILE_PATH + CORPINFO_ID+ "/" + ffile + "/" + fileName; } /** * 临时文件拷贝到正式 * * @param temporaryFilePath 临时文件路径 * @param CORPINFO_ID 企业id * @return 不含路径前缀的正式文件路径 * @throws Exception * @date 2024-9-10 * @author hyx */ public static String copyTemporaryFileToProduct(String temporaryFilePath,String CORPINFO_ID) throws Exception { //临时文件在服务器的完整路径 String completeTemporaryPath = PATH_PREFIX + temporaryFilePath; //截取文件名 String fileName = completeTemporaryPath.substring(completeTemporaryPath.lastIndexOf("")).replace("/",""); //正式文件完整路径 String completeProductPath = PATH_PREFIX + PRODUCT_FILE_PATH + CORPINFO_ID + "/" + DateUtil.getDays() + "/"; //临时文件拷贝到正式路径 try { FileUtil.copy(completeTemporaryPath,completeProductPath,true); } catch (IORuntimeException e) { throw new RuntimeException(e); } return PRODUCT_FILE_PATH + fileName; } }