package com.fd.server.impl; import com.fd.constant.CommandMsg; import com.fd.constant.MsgCode; import com.fd.constant.TypeCode; import com.fd.entity.FileEntity; import com.fd.repository.FileRepository; import com.fd.server.CmdServer; import com.fd.util.ResponseResult; import com.fd.server.FileServer; import com.fd.util.FileUtils; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.transaction.Transactional; import java.io.*; import java.util.Base64; import java.util.Date; import java.util.Optional; /** * Created by Owen on 2019/10/25 0025 16:06 */ @Log4j2 @Service @Transactional public class FileServerImpl implements FileServer { @Autowired private FileRepository fileRepository; @Autowired private CmdServer cmdServer; public ResponseResult uploadBigFile(MultipartFile file, String savePath) { if (file.isEmpty() || file.getSize() <= 0) { log.info("文件为空"); return new ResponseResult (50001, MsgCode.E50001); } // 文件名全名 String fullFileName = file.getOriginalFilename(); // 创建目录路径 FileUtils.createDir(savePath); // 拼接唯一文件名 String fileName = FileUtils.dateStr() + fullFileName; // 文件保存路径 String filePath = savePath + fileName; // 写文件到本地 try { FileUtils.bigFileWrite(file.getInputStream(), filePath); } catch (IOException e) { e.printStackTrace(); } log.info("filePath: {}", filePath); // 保存信息到db FileEntity entity = new FileEntity(); entity.setFileName(fileName); entity.setFileUrl(filePath); // entity.setRecStatus("A"); entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); entity.setType(TypeCode.FILE_TYPE_MODEL); fileRepository.save(entity); return new ResponseResult (200, entity); } /** * 特别需求,只能用文件名,不能用时间戳 */ public ResponseResult uploadVector(MultipartFile file, String savePath, String directoryName) { if (file.isEmpty() || file.getSize() <= 0) { log.info("文件为空"); return new ResponseResult (50001, MsgCode.E50001); } // 文件名全名 String fullFileName = file.getOriginalFilename(); // 创建目录路径 savePath = savePath + directoryName + File.separator; FileUtils.createDir(savePath); // 拼接唯一文件名 // String fileName = FileUtils.dateStr() + fullFileName; // 文件保存路径 String filePath = savePath + fullFileName; // 写文件到本地 try { // FileUtils.bigFileWrite(file.getInputStream(), filePath); byte[] bytes = file.getBytes(); String content = Base64.getEncoder().encodeToString(bytes); // FileUtils.fileWriter(content, filePath); FileUtils.base64ToFileWriter(content, filePath); } catch (IOException e) { e.printStackTrace(); } log.info("filePath: {}", filePath); // 保存信息到db FileEntity entity = new FileEntity(); entity.setFileName(fullFileName); entity.setFileUrl(filePath); // entity.setRecStatus("A"); entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); entity.setType(TypeCode.FILE_TYPE_VECTOR); fileRepository.save(entity); // 修改生成目录的权限 String cmd = CommandMsg.VECTOR_DIRECTORY_PERMISSION; cmd = cmd.replace("@fileName", directoryName); log.info("cmd : {}", cmd); cmdServer.exeCmd(cmd); cmd = CommandMsg.VECTOR_DIRECTORY_VTS; cmd = cmd.replace("@fileName", directoryName); log.info("cmd change user: {}", cmd); cmdServer.exeCmd(cmd); return new ResponseResult (200, entity); } @Override public ResponseResult deleteFileById(Long id) { // 删除服务器文件 Optional e = fileRepository.findById(id); if (!e.isPresent()) { return new ResponseResult(50002, MsgCode.E50002); } FileEntity fileEntity = e.get(); String fileName = fileEntity.getFileName(); // 文件 if (fileName.contains(".")) { File file = new File(fileEntity.getFileUrl()); file.delete(); } else { // 目录 FileUtils.delAllFile(fileEntity.getFileUrl()); } // 删除数据库记录 fileRepository.deleteById(id); return new ResponseResult(200, "success"); } public static void main(String[] args) { String a = "aaa.bb"; String b = "aaa"; System.out.println(a.contains(".")); System.out.println(b.contains(".")); } }