package com.mindskip.xzs.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import com.mindskip.xzs.configuration.property.SystemConfig; import com.mindskip.xzs.service.FileUpload; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.io.BufferedOutputStream; import java.io.File; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.UUID; @Service @AllArgsConstructor public class FileUploadImpl implements FileUpload { private final SystemConfig systemConfig; private final List fileAllowExtension = Arrays.asList(".gif", ".GIF", ".jpg", ".JPG", ".jpeg", ".JPEG" , ".png", ".PNG", ".mp4", ".MP4", ".pdf", ".PDF", ".xlsx", ".XLSX", ".docx", ".DOCX"); @Override public String fileUpload(File file, String fileName, String folder) { if (fileAllowExtension.stream().anyMatch(fe -> fileName.endsWith(fe))) { String filePath = String.format("%s/%s/%s", folder, UUID.randomUUID(), fileName); File destFile = new File(String.format("%s%s", systemConfig.getLocalStore().getResource(), filePath)); File fileParent = destFile.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } FileUtil.copyFile(file, destFile); return systemConfig.getLocalStore().getUrl() + "/" + filePath; } else { return null; } } @Override public String fileUpload(InputStream inputStream, long fileSize, String fileName, String folder) { if (fileAllowExtension.stream().anyMatch(fe -> fileName.endsWith(fe))) { String filePath = String.format("%s/%s/%s", folder, UUID.randomUUID(), fileName); File destFile = new File(String.format("%s%s", systemConfig.getLocalStore().getResource(), filePath)); File fileParent = destFile.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } BufferedOutputStream out = FileUtil.getOutputStream(destFile.getPath()); IoUtil.copy(inputStream, out, IoUtil.DEFAULT_BUFFER_SIZE); IoUtil.close(inputStream); IoUtil.close(out); return systemConfig.getLocalStore().getUrl() + "/" + filePath; } else { return null; } } }