From 3e8c337551471ff14952d94544ad0fcc07addcfe Mon Sep 17 00:00:00 2001 From: Theo <971366405@qq.com> Date: Tue, 10 Dec 2024 17:39:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(file):=20=E6=B7=BB=E5=8A=A0=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E5=AD=98=E5=82=A8=E6=9C=8D=E5=8A=A1-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20LocalFileService=20=E7=B1=BB=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E5=92=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD=20-=20=E5=9C=A8=20applicat?= =?UTF-8?q?ion-dev.yml=20=E5=92=8C=20application-prod.yml=20=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=AC=E5=9C=B0=E5=AD=98=E5=82=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/service/impl/LocalFileService.java | 74 +++++++++++++++++++ src/main/resources/application-dev.yml | 5 +- src/main/resources/application-prod.yml | 5 +- 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/youlai/boot/shared/file/service/impl/LocalFileService.java diff --git a/src/main/java/com/youlai/boot/shared/file/service/impl/LocalFileService.java b/src/main/java/com/youlai/boot/shared/file/service/impl/LocalFileService.java new file mode 100644 index 00000000..f6a217e4 --- /dev/null +++ b/src/main/java/com/youlai/boot/shared/file/service/impl/LocalFileService.java @@ -0,0 +1,74 @@ +package com.youlai.boot.shared.file.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import com.youlai.boot.shared.file.model.FileInfo; +import com.youlai.boot.shared.file.service.FileService; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.InputStream; +import java.time.LocalDateTime; + +/** + * 本地存储服务类 + * + * @author Theo + * @since 2024-12-09 17:11 + */ +@Component +@ConditionalOnProperty(value = "oss.type", havingValue = "local") +@ConfigurationProperties(prefix = "oss.local") +@RequiredArgsConstructor +@Data +public class LocalFileService implements FileService { + + @Value("${oss.local.storage-path}") + private String storagePath; + + @Override + public FileInfo uploadFile(MultipartFile file) { + // 生成文件名(日期文件夹) + String suffix = FileUtil.getSuffix(file.getOriginalFilename()); + String uuid = IdUtil.simpleUUID(); + String folder = DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + File.separator; + String fileName = uuid + "." + suffix; + String filePrefix = storagePath.endsWith(File.separator) ? storagePath : storagePath + File.separator; + // try-with-resource 语法糖自动释放流 + try (InputStream inputStream = file.getInputStream()) { + // 上传文件 + FileUtil.writeFromStream(inputStream, filePrefix +folder+ fileName); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("文件上传失败"); + } + // 获取文件访问路径,因为这里是本地存储,所以直接返回文件的相对路径,需要前端自行处理访问前缀 + String fileUrl = File.separator +folder+File.separator + fileName; + FileInfo fileInfo = new FileInfo(); + fileInfo.setName(fileName); + fileInfo.setUrl(fileUrl); + return fileInfo; + } + + @Override + public boolean deleteFile(String filePath) { + //判断文件是否为空 + if (filePath == null || filePath.isEmpty()) { + return false; + } + // 判断filepath是否为文件夹 + if (FileUtil.isDirectory(storagePath + filePath)) { + // 禁止删除文件夹 + return false; + } + // 删除文件 + return FileUtil.del(storagePath + filePath); + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index badc8126..00bd8854 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -122,7 +122,10 @@ oss: access-key-secret: your-access-key-secret # 存储桶名称 bucket-name: default - + # 本地存储 + local: + # 文件存储路径 请注意下,mac用户请使用 /Users/your-username/your-path/,否则会有权限问题,windows用户请使用 D:/your-path/ + storage-path: /Users/theo/home/ # 短信配置 sms: # 阿里云短信 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 05995d30..5e0f2137 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -121,7 +121,10 @@ oss: access-key-secret: your-access-key-secret # 存储桶名称 bucket-name: default - + # 本地存储 + local: + # 文件存储路径 请注意下,mac用户请使用 /Users/your-username/your-path/,否则会有权限问题,windows用户请使用 D:/your-path/ + storage-path: /Users/theo/home/ # 短信配置 sms: # 阿里云短信