From 3b01902d68582ab83f3e5dcaec219991339aa738 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Sat, 27 Mar 2021 21:02:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=87=E4=BB=B6=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tduck/cloud/api/config/WebMvcConfig.java | 31 ++++++++++-- .../cloud/storage/cloud/OssStorageConfig.java | 16 +++++- .../storage/cloud/OssStorageFactory.java | 2 + .../storage/cloud/OssStorageService.java | 2 +- .../storage/cloud/localStorageService.java | 49 +++++++++++++++++++ .../storage/entity/enums/OssTypeEnum.java | 7 ++- 6 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/localStorageService.java diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java b/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java index b159f4b..9b8bbed 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java @@ -4,14 +4,15 @@ import com.google.common.collect.Lists; import com.tduck.cloud.api.web.interceptor.AuthorizationInterceptor; import com.tduck.cloud.api.web.interceptor.NoRepeatSubmitInterceptor; import com.tduck.cloud.api.web.resolver.LoginUserHandlerMethodArgumentResolver; +import com.tduck.cloud.storage.cloud.OssStorageConfig; +import com.tduck.cloud.storage.entity.enums.OssTypeEnum; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.InterceptorRegistration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.config.annotation.*; +import java.io.File; import java.util.List; /** @@ -20,6 +21,9 @@ import java.util.List; @Configuration public class WebMvcConfig implements WebMvcConfigurer { + @Autowired + private OssStorageConfig storageConfig; + @Autowired private AuthorizationInterceptor authorizationInterceptor; @@ -37,6 +41,25 @@ public class WebMvcConfig implements WebMvcConfigurer { "/**/*.ttf"); + /** + * 配置本地文件上传的虚拟路径和静态化的文件生成路径 + * 备注:这是一种图片上传访问图片的方法,实际上也可以使用nginx反向代理访问图片 + * + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + if (storageConfig.getOssType() == OssTypeEnum.LOCAL) { + // 文件上传 + String uploadFolder = storageConfig.getUploadFolder(); + uploadFolder = StringUtils.appendIfMissing(uploadFolder, File.separator); + registry.addResourceHandler(storageConfig.getAccessPathPattern()) + .addResourceLocations("file:" + uploadFolder); + } + //这句不要忘了,否则项目默认静态资源映射会失效 + registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); + } + @Override public void addInterceptors(InterceptorRegistry registry) { //所有路径都被拦截 diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageConfig.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageConfig.java index 3b3d564..c4c7da0 100644 --- a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageConfig.java +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageConfig.java @@ -21,7 +21,8 @@ public class OssStorageConfig { /** - * oss 类型 参考ossconstant + * oss 类型 + * 参考 OssTypeEnum.java */ private OssTypeEnum ossType; @@ -54,4 +55,17 @@ public class OssStorageConfig { */ private String domain; + + /** + * 本地存储文件存放地址 + */ + private String uploadFolder; + + + /** + * 本地存储文件访问路径 + */ + private String accessPathPattern; + + } diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java index 0efe287..fbd25c6 100644 --- a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java @@ -25,6 +25,8 @@ public final class OssStorageFactory { return new AliyunOssStorageService(config); } else if (config.getOssType() == OssTypeEnum.UPYUN) { return new UpyunStorageService(config); + }else if (config.getOssType() == OssTypeEnum.LOCAL) { + return new localStorageService(config); } return null; } diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageService.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageService.java index d005b9b..2c2c6d2 100644 --- a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageService.java +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageService.java @@ -22,7 +22,7 @@ public abstract class OssStorageService { /** * 文件上传 * - * @param file 文件 上传路径 + * @param inputStream 文件 上传路径 * @param path * @return */ diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/localStorageService.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/localStorageService.java new file mode 100644 index 0000000..c9312dc --- /dev/null +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/localStorageService.java @@ -0,0 +1,49 @@ +package com.tduck.cloud.storage.cloud; + + +import cn.hutool.core.io.FileUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.io.InputStream; + +/** + * @description: 本地文件存储 + * @author: smalljop + * @create: 2018-10-18 14:01 + */ +@Component +@Slf4j +public class localStorageService extends OssStorageService { + public localStorageService(OssStorageConfig config) { + this.config = config; + } + + @Override + public String upload(InputStream inputStream, String path) { + File file = FileUtil.file(config.getUploadFolder() + File.separator + path); + //目录是否存在 + if (!FileUtil.exist(file.getParent())) { + FileUtil.mkdir(file.getParent()); + } + FileUtil.writeFromStream(inputStream, file); + return config.getDomain() + "/" + path; + } + + @Override + public String upload(byte[] data, String path) { + File file = FileUtil.file(config.getUploadFolder() + File.separator + path); + //目录是否存在 + if (!FileUtil.exist(file.getParent())) { + FileUtil.mkdir(file.getParent()); + } + FileUtil.writeBytes(data, file); + return config.getDomain() + "/" + path; + } + + @Override + public void delete(String path) { + FileUtil.del(config.getUploadFolder() + File.separator + path); + } +} diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java index 8c82241..fedb6f4 100644 --- a/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java @@ -24,7 +24,12 @@ public enum OssTypeEnum { /** * 又拍云 */ - UPYUN(2); + UPYUN(2), + + /** + * 本地存储 + */ + LOCAL(3); @JsonCreator