From 5598804ddcb107b6f1957b502c86b74a5790c1bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BE=E5=87=A0=E6=B5=B7?= Date: Fri, 16 Oct 2020 18:05:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9C=AC=E5=9C=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/celess/blog/enmu/ConfigKeyEnum.java | 30 +++++++++ .../fileserviceimpl/FileServiceImpl.java | 12 +++- .../fileserviceimpl/LocalFileServiceImpl.java | 64 ++++++++++++++++++- src/main/resources/sql/data.sql | 2 +- 4 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 src/main/java/cn/celess/blog/enmu/ConfigKeyEnum.java diff --git a/src/main/java/cn/celess/blog/enmu/ConfigKeyEnum.java b/src/main/java/cn/celess/blog/enmu/ConfigKeyEnum.java new file mode 100644 index 0000000..1cbe6f0 --- /dev/null +++ b/src/main/java/cn/celess/blog/enmu/ConfigKeyEnum.java @@ -0,0 +1,30 @@ +package cn.celess.blog.enmu; + +/** + * @author : xiaohai + * @date : 2020/10/16 16:41 + * @desc : + */ +public enum ConfigKeyEnum { + + /** + * 枚举 + */ + FILE_TYPE("file.type"), + FILE_QINIU_ACCESS_KEY("file.qiniu.accessKey"), + FILE_QINIU_SECRET_KEY("file.qiniu.secretKey"), + FILE_QINIU_BUCKET("file.qiniu.bucket"), + FILE_LOCAL_DIRECTORY_PATH("file.local.directoryPath"), + DB_TYPE("db.type"); + + + private final String key; + + ConfigKeyEnum(String key) { + this.key = key; + } + + public String getKey() { + return key; + } +} diff --git a/src/main/java/cn/celess/blog/service/fileserviceimpl/FileServiceImpl.java b/src/main/java/cn/celess/blog/service/fileserviceimpl/FileServiceImpl.java index 7f49b07..9e5e918 100644 --- a/src/main/java/cn/celess/blog/service/fileserviceimpl/FileServiceImpl.java +++ b/src/main/java/cn/celess/blog/service/fileserviceimpl/FileServiceImpl.java @@ -1,7 +1,9 @@ package cn.celess.blog.service.fileserviceimpl; +import cn.celess.blog.enmu.ConfigKeyEnum; import cn.celess.blog.service.FileManager; import cn.celess.blog.service.FileService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -11,6 +13,7 @@ import javax.annotation.Resource; * @date : 2020/10/15 18:52 * @desc : 提供文件管理器的服务 */ +@Slf4j @Service("fileServiceImpl") public class FileServiceImpl implements FileService { @Resource(name = "qiniuFileServiceImpl") @@ -21,6 +24,13 @@ public class FileServiceImpl implements FileService { @Override public FileManager getFileManager() { - return qiniuFileManager; + String property = System.getProperty(ConfigKeyEnum.FILE_TYPE.getKey()); + log.info("获取到{}:{}", ConfigKeyEnum.FILE_TYPE.getKey(), property); + if ("qiniu".equals(property)){ + return qiniuFileManager; + }else if ("local".equals(property)){ + return localFileServiceImpl; + } + return localFileServiceImpl; } } diff --git a/src/main/java/cn/celess/blog/service/fileserviceimpl/LocalFileServiceImpl.java b/src/main/java/cn/celess/blog/service/fileserviceimpl/LocalFileServiceImpl.java index 8e2b23a..b7ebe7f 100644 --- a/src/main/java/cn/celess/blog/service/fileserviceimpl/LocalFileServiceImpl.java +++ b/src/main/java/cn/celess/blog/service/fileserviceimpl/LocalFileServiceImpl.java @@ -1,11 +1,20 @@ package cn.celess.blog.service.fileserviceimpl; +import cn.celess.blog.enmu.ConfigKeyEnum; import cn.celess.blog.entity.model.FileInfo; import cn.celess.blog.entity.model.FileResponse; import cn.celess.blog.service.FileManager; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.io.File; +import java.io.FileOutputStream; import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; import java.util.List; /** @@ -13,20 +22,69 @@ import java.util.List; * @date : 2020/10/16 14:39 * @desc : */ +@Slf4j @Service("localFileServiceImpl") public class LocalFileServiceImpl implements FileManager { + @SneakyThrows @Override public FileResponse uploadFile(InputStream is, String fileName) { - return null; + // 判断文件夹是否存在 + File directory = new File(getPath()); + if (!directory.exists() && directory.mkdirs()) { + log.info("不存在文件夹,创建文件夹=>{}", directory.getAbsolutePath()); + } + log.info("上传文件 {}", fileName); + // 存储文件 + File file1 = new File(getPath() + File.separator + fileName); + FileOutputStream fos = new FileOutputStream(file1); + byte[] cache = new byte[1024 * 100]; + int len = 0; + FileResponse fileResponse = new FileResponse(); + while ((len = is.read(cache)) != -1) { + fileResponse.size += len; + fos.write(cache, 0, len); + } + fos.flush(); + fos.close(); + is.close(); + fileResponse.key = URLEncoder.encode(fileName, "UTF-8"); + fileResponse.bucket = "local"; + return fileResponse; } + @SneakyThrows @Override public List getFileList() { - return null; + File file = new File(getPath()); + File[] files = file.listFiles(); + List fileInfoList = new ArrayList<>(); + if (files == null) { + return null; + } + for (File file1 : files) { + FileInfo fileInfo = new FileInfo(); + fileInfo.key = URLEncoder.encode(file1.getName(), "UTF-8"); + fileInfo.size = file1.length(); + BasicFileAttributes basicFileAttributes = Files.readAttributes(file1.toPath(), BasicFileAttributes.class); + fileInfo.uploadTime = basicFileAttributes.creationTime().toMillis(); + fileInfoList.add(fileInfo); + } + return fileInfoList; } @Override public boolean deleteFile(String fileName) { - return false; + File file = new File(getPath() + File.separator + fileName); + return file.delete(); + } + + private String getPath() { + String path = System.getProperty(ConfigKeyEnum.FILE_LOCAL_DIRECTORY_PATH.getKey()).replaceAll("//", File.separator); + if (path.startsWith("~")) { + // 家目录 + path = path.replaceFirst("~", ""); + path = System.getProperty("user.home") + path; + } + return path; } } diff --git a/src/main/resources/sql/data.sql b/src/main/resources/sql/data.sql index 198b129..13630cb 100644 --- a/src/main/resources/sql/data.sql +++ b/src/main/resources/sql/data.sql @@ -219,5 +219,5 @@ VALUES (1, 'file.type', 'local'), (2, 'file.qiniu.accessKey', ''), (3, 'file.qiniu.secretKey', ''), (4, 'file.qiniu.bucket', ''), - (6, 'file.local.dictoryPath', ''), + (6, 'file.local.directoryPath', '~/blog/files'), (7, 'db.type', 'h2')