package com.sandu.common.file.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.io.FileTypeUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.UUID; import com.sandu.common.enums.FileStorageEnums; import com.sandu.common.execption.BusinessException; import com.sandu.common.file.FileUploadDto; import com.sandu.common.file.IFileUpload; import com.sandu.common.file.config.FileProperties; import com.sandu.common.util.SpringContextHolder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.time.LocalDate; import java.util.List; import java.util.Optional; /** * @author chenjiantian 本地服务器上传 */ @Slf4j @Service @AllArgsConstructor public class LocalFileUploadImpl implements IFileUpload { private static List videoSuffixList = CollectionUtil.newArrayList("mp4", "mov", "avi", "mkv", "m4v", "wmv", "asf", "asx", "rm", "rmvb", "3gp", "dat", "flv", "vob"); @Override public FileUploadDto uploadFile(MultipartFile multipartFile) { FileProperties fileProperties = SpringContextHolder.getBean(FileProperties.class); String originalFilename = multipartFile.getOriginalFilename(); long size = multipartFile.getSize(); String suffix = FileUtil.getSuffix(originalFilename); String date = LocalDateTimeUtil.formatNormal(LocalDate.now()); String fileName = UUID.fastUUID().toString() + "." + suffix; File dest; try { String type = Optional.ofNullable(FileTypeUtil.getType(multipartFile.getInputStream(), originalFilename)).orElse(""); dest = new File(fileProperties.getUploadRootPath() + type + File.separator + date + File.separator + fileName).getCanonicalFile(); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } multipartFile.transferTo(dest); } catch (Exception e) { e.printStackTrace(); throw new BusinessException(e.getMessage()); } FileUploadDto uploadDto = new FileUploadDto(); uploadDto.setOriginName(originalFilename); uploadDto.setFileName(fileName); uploadDto.setFileUrl(dest.getPath().replace(fileProperties.getUploadRootPath(), "")); uploadDto.setFileType(FileUtil.getType(dest)); uploadDto.setStorageType(FileStorageEnums.LOCAL.getCode()); uploadDto.setFileSize(size); if (IMAGE_SUFFIX_LIST.contains(uploadDto.getFileType())) { BufferedImage img = null; try { img = ImageIO.read(dest); } catch (IOException e) { e.printStackTrace(); } if (img != null && img.getWidth() >= 0 && img.getHeight() >= 0) { uploadDto.setWidth(img.getWidth()); uploadDto.setHeight(img.getHeight()); } } return uploadDto; } public FileUploadDto uploadCert(MultipartFile multipartFile) { String originalFilename = multipartFile.getOriginalFilename(); long size = multipartFile.getSize(); String suffix = FileUtil.getSuffix(originalFilename); String date = LocalDateTimeUtil.formatNormal(LocalDate.now()); String fileName = UUID.fastUUID().toString() + "." + suffix; File dest; try { String type = Optional.ofNullable(FileTypeUtil.getType(multipartFile.getInputStream(), originalFilename)).orElse(""); // dest = new File(fileProperties.getUploadRootPath() + type + File.separator + date + File.separator + fileName).getCanonicalFile(); // if (!dest.getParentFile().exists()) { // dest.getParentFile().mkdirs(); // } // multipartFile.transferTo(dest); } catch (Exception e) { e.printStackTrace(); throw new BusinessException(e.getMessage()); } FileUploadDto uploadDto = new FileUploadDto(); uploadDto.setOriginName(originalFilename); uploadDto.setFileName(fileName); // uploadDto.setFileUrl(dest.getPath()); // uploadDto.setFileType(FileUtil.getType(dest)); uploadDto.setStorageType(FileStorageEnums.LOCAL.getCode()); uploadDto.setFileSize(size); return uploadDto; } }