package com.cloudroam.extension.file; import com.cloudroam.module.file.AbstractUploader; import com.cloudroam.module.file.FileProperties; import com.cloudroam.module.file.FileTypeEnum; import com.cloudroam.module.file.FileUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; import java.io.BufferedOutputStream; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.Date; /** * 文件上传服务默认实现,上传到本地 * * @author */ @Slf4j public class LocalUploader extends AbstractUploader { @Autowired private FileProperties fileProperties; @PostConstruct public void initStoreDir() { // 本地存储需先初始化存储文件夹 FileUtil.initStoreDir(this.fileProperties.getStoreDir()); } @Override protected boolean handleOneFile(byte[] bytes, String newFilename) { String absolutePath = FileUtil.getFileAbsolutePath(fileProperties.getStoreDir(), getStorePath(newFilename)); try (BufferedOutputStream stream = new BufferedOutputStream(Files.newOutputStream(new File(absolutePath).toPath()))) { stream.write(bytes); } catch (Exception e) { log.error("write file to local err:", e); return false; } return true; } @Override protected FileProperties getFileProperties() { return fileProperties; } @SuppressWarnings("ResultOfMethodCallIgnored") @Override protected String getStorePath(String newFilename) { Date now = new Date(); String format = new SimpleDateFormat("yyyy/MM/dd").format(now); Path path = Paths.get(fileProperties.getStoreDir(), format).toAbsolutePath(); java.io.File file = new File(path.toString()); if (!file.exists()) { file.mkdirs(); } return Paths.get(format, newFilename).toString(); } @Override protected String getFileType() { return FileTypeEnum.LOCAL.getValue(); } }