From 4d347fc108e8e09bffe1fba4ebcb2fb43b215371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E6=98=8A?= Date: Thu, 7 May 2026 14:52:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(storage):=20=E6=B7=BB=E5=8A=A0MinIO?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=AD=98=E5=82=A8=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现基于MinIO的对象存储功能,包括: 1. 新增MinioProperties配置类 2. 创建UploadStorage接口及Minio/Local实现 3. 重构MediaLibraryService使用统一存储接口 4. 添加MinIO模式下文件服务控制器 5. 提供docker-compose.minio.yml部署配置 6. 更新文档说明MinIO集成方式 支持本地存储和MinIO对象存储两种模式,可通过upload.storage配置切换 --- database/SQL_INDEX.md | 4 + docker-compose.minio.yml | 19 +++ server/deploy/minio-spring-config.example.yml | 27 +++++ server/pom.xml | 6 + .../server/WuhanSagaApplication.java | 3 +- .../server/config/MinioProperties.java | 24 ++++ .../wuhansaga/server/config/WebMvcConfig.java | 6 + .../portal/UploadServeController.java | 88 ++++++++++++++ .../server/service/MediaLibraryService.java | 38 +----- .../server/storage/LocalUploadStorage.java | 77 ++++++++++++ .../server/storage/MinioUploadStorage.java | 112 ++++++++++++++++++ .../server/storage/UploadStorage.java | 19 +++ server/src/main/resources/application.yml | 10 ++ server/target/classes/application.yml | 10 ++ .../server/WuhanSagaApplication.class | Bin 994 -> 1045 bytes .../server/config/MinioProperties.class | Bin 0 -> 2354 bytes .../server/config/PortalSiteProperties.class | Bin 4153 -> 4177 bytes .../server/config/PortalSiteResolver.class | Bin 2739 -> 2731 bytes .../server/config/WebMvcConfig.class | Bin 3449 -> 3588 bytes .../wuhansaga/server/constant/SiteCodes.class | Bin 446 -> 446 bytes .../admin/AdminNewsController.class | Bin 5034 -> 5034 bytes .../admin/AdminProductLineController.class | Bin 4997 -> 4997 bytes .../portal/PortalNewsController.class | Bin 3707 -> 3707 bytes .../portal/PortalProductController.class | Bin 5011 -> 5011 bytes .../portal/UploadServeController$1.class | Bin 0 -> 1332 bytes .../portal/UploadServeController$2.class | Bin 0 -> 1121 bytes .../portal/UploadServeController.class | Bin 0 -> 5912 bytes .../server/entity/MediaLibrary.class | Bin 12102 -> 12007 bytes .../com/wuhansaga/server/entity/News.class | Bin 16466 -> 16371 bytes .../server/entity/NewsCategory.class | Bin 7684 -> 7598 bytes .../server/entity/ProductCategory.class | Bin 9678 -> 9582 bytes .../wuhansaga/server/entity/ProductLine.class | Bin 30706 -> 30608 bytes .../server/entity/SingleEquipment.class | Bin 21090 -> 20999 bytes .../wuhansaga/server/entity/SparePart.class | Bin 20513 -> 20422 bytes .../server/mapper/NewsCategoryMapper.class | Bin 862 -> 862 bytes .../wuhansaga/server/mapper/NewsMapper.class | Bin 1685 -> 1685 bytes .../server/mapper/ProductCategoryMapper.class | Bin 976 -> 976 bytes .../mapper/ProductLineEquipmentMapper.class | Bin 1138 -> 1138 bytes .../server/mapper/SingleEquipmentMapper.class | Bin 1249 -> 1249 bytes .../server/service/BannerService.class | Bin 2260 -> 2260 bytes .../server/service/MediaLibraryService.class | Bin 6080 -> 4988 bytes .../server/service/NewsCategoryService.class | Bin 2508 -> 2508 bytes .../server/service/NewsService.class | Bin 5341 -> 5337 bytes .../service/ProductCategoryService.class | Bin 3797 -> 3732 bytes .../server/service/ProductLineService.class | Bin 4591 -> 4591 bytes .../server/storage/LocalUploadStorage.class | Bin 0 -> 4884 bytes .../server/storage/MinioUploadStorage.class | Bin 0 -> 7547 bytes .../storage/UploadStorage$StoredObject.class | Bin 0 -> 1979 bytes .../server/storage/UploadStorage.class | Bin 0 -> 661 bytes .../compile/default-compile/createdFiles.lst | 8 ++ .../compile/default-compile/inputFiles.lst | 5 + 51 files changed, 422 insertions(+), 34 deletions(-) create mode 100644 docker-compose.minio.yml create mode 100644 server/deploy/minio-spring-config.example.yml create mode 100644 server/src/main/java/com/wuhansaga/server/config/MinioProperties.java create mode 100644 server/src/main/java/com/wuhansaga/server/controller/portal/UploadServeController.java create mode 100644 server/src/main/java/com/wuhansaga/server/storage/LocalUploadStorage.java create mode 100644 server/src/main/java/com/wuhansaga/server/storage/MinioUploadStorage.java create mode 100644 server/src/main/java/com/wuhansaga/server/storage/UploadStorage.java create mode 100644 server/target/classes/com/wuhansaga/server/config/MinioProperties.class create mode 100644 server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController$1.class create mode 100644 server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController$2.class create mode 100644 server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController.class create mode 100644 server/target/classes/com/wuhansaga/server/storage/LocalUploadStorage.class create mode 100644 server/target/classes/com/wuhansaga/server/storage/MinioUploadStorage.class create mode 100644 server/target/classes/com/wuhansaga/server/storage/UploadStorage$StoredObject.class create mode 100644 server/target/classes/com/wuhansaga/server/storage/UploadStorage.class diff --git a/database/SQL_INDEX.md b/database/SQL_INDEX.md index 9833c8d3..86e43433 100644 --- a/database/SQL_INDEX.md +++ b/database/SQL_INDEX.md @@ -5,6 +5,10 @@ - **用于生产一次性导入**:`wuhan_saga_prod_YYYYMMDD.sql`(全库 `mysqldump`,含结构与数据)。 - 导入后**不要**再按顺序重放本目录下历史 `patch_*.sql` / `migration_*.sql`(除非你在维护很老的库且确认缺列)。 +## 附件与 MinIO + +- 图片路径在库中仍为 `/uploads/{分类}/{文件名}`。`upload.storage=minio` 时文件在对象存储桶内键为 `uploads/...`,需把原 `uploads/` 目录同步进桶(见仓库 `docker-compose.minio.yml` 与后端 `application.yml` 中 `minio.*`)。 + ## 日常开发以代码为准的 DDL | 文件 | 用途 | diff --git a/docker-compose.minio.yml b/docker-compose.minio.yml new file mode 100644 index 00000000..36f9f84b --- /dev/null +++ b/docker-compose.minio.yml @@ -0,0 +1,19 @@ +# 本地/内网 MinIO(与 Spring upload.storage=minio 配套) +# 启动:docker compose -f docker-compose.minio.yml up -d +# 控制台:http://127.0.0.1:9001 (默认账号 minioadmin / minioadmin,生产务必修改) + +services: + minio: + image: minio/minio:RELEASE.2024-11-07T00-52-20Z + command: server /data --console-address ":9001" + ports: + - "9000:9000" + - "9001:9001" + environment: + MINIO_ROOT_USER: minioadmin + MINIO_ROOT_PASSWORD: minioadmin + volumes: + - minio-data:/data + +volumes: + minio-data: diff --git a/server/deploy/minio-spring-config.example.yml b/server/deploy/minio-spring-config.example.yml new file mode 100644 index 00000000..b9fe01de --- /dev/null +++ b/server/deploy/minio-spring-config.example.yml @@ -0,0 +1,27 @@ +# Spring Boot 使用 MinIO 时,在「生产配置」里增加或改成以下内容。 +# 不要提交含真实生产密码的副本;交给运维时可另存为服务器上的 application-prod.yml。 +# +# 启动示例:java -jar wuhan-saga-server.jar --spring.profiles.active=prod +# +# 与运维 Docker 中环境变量的对应: +# MINIO_ROOT_USER -> minio.access-key +# MINIO_ROOT_PASSWORD -> minio.secret-key +# endpoint:Spring 所在机器能访问的 MinIO API(9000)。同机 Docker host 网络一般用 http://127.0.0.1:9000 + +# --- 下面粘贴进 application-prod.yml(或通过 Nacos/环境变量等价提供)--- + +spring: + config: + activate: + on-profile: prod + +upload: + storage: minio + path: uploads/ + +minio: + endpoint: http://127.0.0.1:9000 + access-key: klp + secret-key: ruoyi123 + bucket: wuhan-saga + region: us-east-1 diff --git a/server/pom.xml b/server/pom.xml index d0a4bd18..f3a918fd 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -84,6 +84,12 @@ ${hutool.version} + + io.minio + minio + 8.5.13 + + org.projectlombok lombok diff --git a/server/src/main/java/com/wuhansaga/server/WuhanSagaApplication.java b/server/src/main/java/com/wuhansaga/server/WuhanSagaApplication.java index 94c211da..09a7957e 100644 --- a/server/src/main/java/com/wuhansaga/server/WuhanSagaApplication.java +++ b/server/src/main/java/com/wuhansaga/server/WuhanSagaApplication.java @@ -1,5 +1,6 @@ package com.wuhansaga.server; +import com.wuhansaga.server.config.MinioProperties; import com.wuhansaga.server.config.PortalSiteProperties; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; @@ -8,7 +9,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties @SpringBootApplication @MapperScan("com.wuhansaga.server.mapper") -@EnableConfigurationProperties(PortalSiteProperties.class) +@EnableConfigurationProperties({ PortalSiteProperties.class, MinioProperties.class }) public class WuhanSagaApplication { public static void main(String[] args) { diff --git a/server/src/main/java/com/wuhansaga/server/config/MinioProperties.java b/server/src/main/java/com/wuhansaga/server/config/MinioProperties.java new file mode 100644 index 00000000..3ab1adb5 --- /dev/null +++ b/server/src/main/java/com/wuhansaga/server/config/MinioProperties.java @@ -0,0 +1,24 @@ +package com.wuhansaga.server.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * MinIO(S3 兼容)接入;仅在 upload.storage=minio 时使用。 + */ +@ConfigurationProperties(prefix = "minio") +public record MinioProperties( + /** 例:http://127.0.0.1:9000 或 https://minio.example.com(无尾斜杠) */ + String endpoint, + String accessKey, + String secretKey, + /** 桶名,需有读权限;上传会 put 到此桶 */ + String bucket, + /** 区域,MinIO 单机常用 us-east-1 */ + String region +) { + public MinioProperties { + if (region == null || region.isBlank()) { + region = "us-east-1"; + } + } +} diff --git a/server/src/main/java/com/wuhansaga/server/config/WebMvcConfig.java b/server/src/main/java/com/wuhansaga/server/config/WebMvcConfig.java index ef1f0c13..c482ab9a 100644 --- a/server/src/main/java/com/wuhansaga/server/config/WebMvcConfig.java +++ b/server/src/main/java/com/wuhansaga/server/config/WebMvcConfig.java @@ -14,6 +14,9 @@ public class WebMvcConfig implements WebMvcConfigurer { @Value("${upload.path:uploads/}") private String uploadPath; + @Value("${upload.storage:local}") + private String uploadStorage; + @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") @@ -26,6 +29,9 @@ public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { + if ("minio".equalsIgnoreCase(uploadStorage)) { + return; + } File dir = new File(uploadPath); if (!dir.isAbsolute()) { dir = new File(System.getProperty("user.dir"), uploadPath); diff --git a/server/src/main/java/com/wuhansaga/server/controller/portal/UploadServeController.java b/server/src/main/java/com/wuhansaga/server/controller/portal/UploadServeController.java new file mode 100644 index 00000000..ab134cbd --- /dev/null +++ b/server/src/main/java/com/wuhansaga/server/controller/portal/UploadServeController.java @@ -0,0 +1,88 @@ +package com.wuhansaga.server.controller.portal; + +import com.wuhansaga.server.storage.UploadStorage; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.InputStream; +import java.util.Optional; + +/** + * MinIO 模式下由应用流式输出 /uploads/**;对象不存在时回退到 classpath bundled-uploads。 + */ +@RestController +@RequiredArgsConstructor +@ConditionalOnProperty(name = "upload.storage", havingValue = "minio") +public class UploadServeController { + + private final UploadStorage uploadStorage; + private final ResourceLoader resourceLoader; + + @GetMapping("/uploads/**") + public ResponseEntity serve(HttpServletRequest request) + throws IOException { + String rel = requestUriWithoutContext(request); + if (!rel.startsWith("/uploads/")) { + return ResponseEntity.notFound().build(); + } + + Optional fromStore = uploadStorage.open(rel); + if (fromStore.isPresent()) { + UploadStorage.StoredObject o = fromStore.get(); + MediaType mt = MediaType.parseMediaType(o.contentType()); + var body = new org.springframework.core.io.InputStreamResource(o.inputStream()) { + @Override + public long contentLength() { + return o.size(); + } + }; + return ResponseEntity.ok().contentType(mt).contentLength(o.size()).body(body); + } + + String tail = rel.substring("/uploads/".length()); + Resource bundled = resourceLoader.getResource("classpath:/static/bundled-uploads/" + tail); + if (!bundled.exists() || !bundled.isReadable()) { + return ResponseEntity.notFound().build(); + } + InputStream in = bundled.getInputStream(); + long len = bundled.contentLength(); + MediaType mt = MediaType.APPLICATION_OCTET_STREAM; + String name = bundled.getFilename(); + if (name != null && (name.endsWith(".jpg") || name.endsWith(".jpeg"))) { + mt = MediaType.IMAGE_JPEG; + } else if (name != null && name.endsWith(".png")) { + mt = MediaType.IMAGE_PNG; + } else if (name != null && name.endsWith(".gif")) { + mt = MediaType.IMAGE_GIF; + } else if (name != null && name.endsWith(".webp")) { + mt = MediaType.parseMediaType("image/webp"); + } + var body = new org.springframework.core.io.InputStreamResource(in) { + @Override + public long contentLength() { + return len > 0 ? len : -1; + } + }; + if (len > 0) { + return ResponseEntity.ok().contentType(mt).contentLength(len).body(body); + } + return ResponseEntity.ok().contentType(mt).body(body); + } + + private static String requestUriWithoutContext(HttpServletRequest request) { + String uri = request.getRequestURI(); + String cp = request.getContextPath(); + if (cp != null && !cp.isEmpty() && uri.startsWith(cp)) { + return uri.substring(cp.length()); + } + return uri; + } +} diff --git a/server/src/main/java/com/wuhansaga/server/service/MediaLibraryService.java b/server/src/main/java/com/wuhansaga/server/service/MediaLibraryService.java index ddf79d10..e4701500 100644 --- a/server/src/main/java/com/wuhansaga/server/service/MediaLibraryService.java +++ b/server/src/main/java/com/wuhansaga/server/service/MediaLibraryService.java @@ -4,13 +4,11 @@ import com.wuhansaga.server.common.PageQuery; import com.wuhansaga.server.common.PageResult; import com.wuhansaga.server.entity.MediaLibrary; import com.wuhansaga.server.mapper.MediaLibraryMapper; +import com.wuhansaga.server.storage.UploadStorage; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import jakarta.annotation.PostConstruct; -import java.io.File; import java.io.IOException; import java.util.List; import java.util.UUID; @@ -20,29 +18,11 @@ import java.util.UUID; public class MediaLibraryService { private final MediaLibraryMapper mediaLibraryMapper; + private final UploadStorage uploadStorage; - @Value("${upload.path}") - private String uploadPath; - - private File uploadDir; - - public MediaLibraryService(MediaLibraryMapper mediaLibraryMapper) { + public MediaLibraryService(MediaLibraryMapper mediaLibraryMapper, UploadStorage uploadStorage) { this.mediaLibraryMapper = mediaLibraryMapper; - } - - @PostConstruct - public void init() { - uploadDir = new File(uploadPath); - if (!uploadDir.isAbsolute()) { - String userDir = System.getProperty("user.dir"); - uploadDir = new File(userDir, uploadPath); - } - if (!uploadDir.exists()) { - boolean created = uploadDir.mkdirs(); - log.info("初始化上传目录: {} => {}", uploadDir.getAbsolutePath(), created); - } else { - log.info("上传目录已存在: {}", uploadDir.getAbsolutePath()); - } + this.uploadStorage = uploadStorage; } public PageResult page(String category, String keyword, PageQuery query) { @@ -63,15 +43,7 @@ public class MediaLibraryService { String newFileName = UUID.randomUUID().toString().replace("-", "") + ext; String relativePath = "/uploads/" + category + "/" + newFileName; - File categoryDir = new File(uploadDir, category); - if (!categoryDir.exists()) { - boolean created = categoryDir.mkdirs(); - log.info("创建分类目录: {} => {}", categoryDir.getAbsolutePath(), created); - } - - File dest = new File(categoryDir, newFileName); - file.transferTo(dest); - log.info("文件已保存: {}", dest.getAbsolutePath()); + uploadStorage.store(file, relativePath); MediaLibrary media = new MediaLibrary(); media.setFilePath(relativePath); diff --git a/server/src/main/java/com/wuhansaga/server/storage/LocalUploadStorage.java b/server/src/main/java/com/wuhansaga/server/storage/LocalUploadStorage.java new file mode 100644 index 00000000..157d6acf --- /dev/null +++ b/server/src/main/java/com/wuhansaga/server/storage/LocalUploadStorage.java @@ -0,0 +1,77 @@ +package com.wuhansaga.server.storage; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.annotation.PostConstruct; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.Optional; + +@Slf4j +@Component +@ConditionalOnProperty(name = "upload.storage", havingValue = "local", matchIfMissing = true) +public class LocalUploadStorage implements UploadStorage { + + @Value("${upload.path}") + private String uploadPath; + + private File uploadDir; + + @PostConstruct + public void init() { + uploadDir = new File(uploadPath); + if (!uploadDir.isAbsolute()) { + uploadDir = new File(System.getProperty("user.dir"), uploadPath); + } + if (!uploadDir.exists()) { + boolean created = uploadDir.mkdirs(); + log.info("初始化本地上传目录: {} => {}", uploadDir.getAbsolutePath(), created); + } else { + log.info("本地上传目录已存在: {}", uploadDir.getAbsolutePath()); + } + } + + @Override + public void store(MultipartFile file, String relativePath) throws IOException { + if (relativePath == null || !relativePath.startsWith("/uploads/")) { + throw new IllegalArgumentException("relativePath 须以 /uploads/ 开头: " + relativePath); + } + String withoutPrefix = relativePath.substring("/uploads/".length()); + int slash = withoutPrefix.lastIndexOf('/'); + String category = slash >= 0 ? withoutPrefix.substring(0, slash) : ""; + String fileName = slash >= 0 ? withoutPrefix.substring(slash + 1) : withoutPrefix; + + File categoryDir = category.isEmpty() ? uploadDir : new File(uploadDir, category); + if (!categoryDir.exists()) { + boolean created = categoryDir.mkdirs(); + log.info("创建分类目录: {} => {}", categoryDir.getAbsolutePath(), created); + } + File dest = new File(categoryDir, fileName); + file.transferTo(dest); + log.info("文件已保存(本地): {}", dest.getAbsolutePath()); + } + + @Override + public Optional open(String relativePath) throws IOException { + if (relativePath == null || !relativePath.startsWith("/uploads/")) { + return Optional.empty(); + } + String withoutPrefix = relativePath.substring("/uploads/".length()); + File f = new File(uploadDir, withoutPrefix.replace('/', File.separatorChar)); + if (!f.isFile()) { + return Optional.empty(); + } + String ct = Files.probeContentType(f.toPath()); + if (ct == null) { + ct = "application/octet-stream"; + } + InputStream in = Files.newInputStream(f.toPath()); + return Optional.of(new StoredObject(in, f.length(), ct)); + } +} diff --git a/server/src/main/java/com/wuhansaga/server/storage/MinioUploadStorage.java b/server/src/main/java/com/wuhansaga/server/storage/MinioUploadStorage.java new file mode 100644 index 00000000..180a54b6 --- /dev/null +++ b/server/src/main/java/com/wuhansaga/server/storage/MinioUploadStorage.java @@ -0,0 +1,112 @@ +package com.wuhansaga.server.storage; + +import com.wuhansaga.server.config.MinioProperties; +import io.minio.BucketExistsArgs; +import io.minio.GetObjectArgs; +import io.minio.MakeBucketArgs; +import io.minio.MinioClient; +import io.minio.PutObjectArgs; +import io.minio.StatObjectArgs; +import io.minio.StatObjectResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.annotation.PostConstruct; +import java.io.InputStream; +import java.util.Optional; + +@Slf4j +@Component +@ConditionalOnProperty(name = "upload.storage", havingValue = "minio") +public class MinioUploadStorage implements UploadStorage { + + private final MinioProperties props; + private MinioClient client; + + public MinioUploadStorage(MinioProperties props) { + this.props = props; + } + + @PostConstruct + public void init() throws java.io.IOException { + if (props.endpoint() == null || props.endpoint().isBlank()) { + throw new IllegalStateException("minio.endpoint 未配置"); + } + if (props.accessKey() == null || props.secretKey() == null || props.bucket() == null + || props.accessKey().isBlank() || props.secretKey().isBlank() || props.bucket().isBlank()) { + throw new IllegalStateException("minio.access-key、secret-key、bucket 均需配置"); + } + client = MinioClient.builder() + .endpoint(props.endpoint()) + .region(props.region()) + .credentials(props.accessKey(), props.secretKey()) + .build(); + try { + boolean exists = client.bucketExists(BucketExistsArgs.builder().bucket(props.bucket()).build()); + if (!exists) { + client.makeBucket(MakeBucketArgs.builder().bucket(props.bucket()).build()); + log.info("已创建 MinIO 桶: {}", props.bucket()); + } else { + log.info("MinIO 桶已存在: {}", props.bucket()); + } + } catch (Exception e) { + throw new java.io.IOException("初始化 MinIO 失败: " + e.getMessage(), e); + } + } + + private static String objectName(String relativePath) { + if (relativePath == null || !relativePath.startsWith("/uploads/")) { + throw new IllegalArgumentException("relativePath 须以 /uploads/ 开头: " + relativePath); + } + return relativePath.substring(1); + } + + @Override + public void store(MultipartFile file, String relativePath) throws java.io.IOException { + String name = objectName(relativePath); + String ct = file.getContentType(); + if (ct == null || ct.isBlank()) { + ct = "application/octet-stream"; + } + try (InputStream in = file.getInputStream()) { + client.putObject( + PutObjectArgs.builder() + .bucket(props.bucket()) + .object(name) + .stream(in, file.getSize(), -1) + .contentType(ct) + .build()); + } catch (Exception e) { + throw new java.io.IOException("MinIO 上传失败: " + e.getMessage(), e); + } + log.info("文件已写入 MinIO: {}/{}", props.bucket(), name); + } + + @Override + public Optional open(String relativePath) throws java.io.IOException { + if (relativePath == null || !relativePath.startsWith("/uploads/")) { + return Optional.empty(); + } + String name = objectName(relativePath); + try { + StatObjectResponse stat = client.statObject( + StatObjectArgs.builder().bucket(props.bucket()).object(name).build()); + InputStream in = client.getObject( + GetObjectArgs.builder().bucket(props.bucket()).object(name).build()); + String ct = stat.contentType(); + if (ct == null || ct.isBlank()) { + ct = "application/octet-stream"; + } + return Optional.of(new StoredObject(in, stat.size(), ct)); + } catch (io.minio.errors.ErrorResponseException e) { + if ("NoSuchKey".equals(e.errorResponse().code()) || "NoSuchObject".equals(e.errorResponse().code())) { + return Optional.empty(); + } + throw new java.io.IOException("MinIO 读取失败: " + e.getMessage(), e); + } catch (Exception e) { + throw new java.io.IOException("MinIO 读取失败: " + e.getMessage(), e); + } + } +} diff --git a/server/src/main/java/com/wuhansaga/server/storage/UploadStorage.java b/server/src/main/java/com/wuhansaga/server/storage/UploadStorage.java new file mode 100644 index 00000000..26445c1a --- /dev/null +++ b/server/src/main/java/com/wuhansaga/server/storage/UploadStorage.java @@ -0,0 +1,19 @@ +package com.wuhansaga.server.storage; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Optional; + +/** + * 统一上传存储;相对路径与库存一致,如 /uploads/banner/xxx.jpg + */ +public interface UploadStorage { + + void store(MultipartFile file, String relativePath) throws IOException; + + Optional open(String relativePath) throws IOException; + + record StoredObject(InputStream inputStream, long size, String contentType) {} +} diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml index 838b6190..be64af1e 100644 --- a/server/src/main/resources/application.yml +++ b/server/src/main/resources/application.yml @@ -56,11 +56,21 @@ knife4j: setting: language: zh_cn +# 存储:local=本机 uploads | minio=对象存储,见 server/deploy/minio-spring-config.example.yml upload: + storage: local path: uploads/ allowed-types: image/jpeg,image/png,image/gif,image/webp,image/svg+xml,video/mp4,video/webm max-size: 52428800 +# 仅 upload.storage=minio 时生效;密钥用环境变量注入,勿提交生产明文 +minio: + endpoint: http://127.0.0.1:9000 + access-key: minioadmin + secret-key: minioadmin + bucket: wuhan-saga + region: us-east-1 + # 新闻中心多站点:单部署实例默认站点;扩展编码时改 allowed-site-codes 与库内数据 app: portal: diff --git a/server/target/classes/application.yml b/server/target/classes/application.yml index 838b6190..be64af1e 100644 --- a/server/target/classes/application.yml +++ b/server/target/classes/application.yml @@ -56,11 +56,21 @@ knife4j: setting: language: zh_cn +# 存储:local=本机 uploads | minio=对象存储,见 server/deploy/minio-spring-config.example.yml upload: + storage: local path: uploads/ allowed-types: image/jpeg,image/png,image/gif,image/webp,image/svg+xml,video/mp4,video/webm max-size: 52428800 +# 仅 upload.storage=minio 时生效;密钥用环境变量注入,勿提交生产明文 +minio: + endpoint: http://127.0.0.1:9000 + access-key: minioadmin + secret-key: minioadmin + bucket: wuhan-saga + region: us-east-1 + # 新闻中心多站点:单部署实例默认站点;扩展编码时改 allowed-site-codes 与库内数据 app: portal: diff --git a/server/target/classes/com/wuhansaga/server/WuhanSagaApplication.class b/server/target/classes/com/wuhansaga/server/WuhanSagaApplication.class index 67441d3df97f3d151303e79ad072dfac792f7be8..19d133e6fa326a6cea9e48585fce1227995a29fc 100644 GIT binary patch delta 275 zcmaFFK9xiK)W2Q(7#J9A8I-vgm>8JZ8CZB2SQ*$R+990neIU&Uq*=ALGcaxhOA7!=kTe6(K0zSK z15v;r#2^ghaWaT7hyo1(X*L5J#=yWK#ICi2fioPgpAYC{kZl4$TLl>eC(mToQc`4K dW{?4j$pVd&i)LUfW{_u4fUud885ENllmLt=BXa-% delta 269 zcmbQr@rYgE)W2Q(7#J9A8I;%=m>3x}Co3?EPL5_2VPP!@G-W(|2cpaW!pqOw4< S<)RrFiy7n@6rk*621Nh?0wFK} diff --git a/server/target/classes/com/wuhansaga/server/config/MinioProperties.class b/server/target/classes/com/wuhansaga/server/config/MinioProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..8e4569c5be564029c8a81ed527a54874511f9470 GIT binary patch literal 2354 zcmb_cT~pge6g>-;WrI?K!4!vt&?afI2odzVF`)&LG&ClmKzT@~4~tlgVxx6eYm)qw z{)av^Go_v3p?&K^epK7Lk^qys49s*u-rcKv&YpX9?|uE(;qL(MVzUoD=(Uk?U?Iye z@Qm+sugSx@wK^W+HhTh2vx#y6#(dVEa&MEhGt%9)5UJ&c5peiM#5J@r`9VDt{Q80tL-<0 zHjdXEOvEN7>VXW4l%aPWT*nQ%Tg#&W7ba^LkX^0(TdE;`&%yhcB;s8j?Jmh}!7y_{ z;$_3*I+(&O3Pb$R=1t1d;>B1x)IHgHCVXA3JZ1QPvcsMx`2Vt0HW@NW#D!WAipTA} zEul8}R+Dm2tVy3YH@OPTIW=bVZa|SuUnuVkm)14+8!Nn((hRH!y(_m@x#D|53q_Q} zlU+VfT)E2(rOqUDB!|h<1(?2K=v$X<<%llLdCK~WMhrt=1JbV zC^^c5jSa$|?MfdkNg8HpD)ms8TPT`|NxPz%aPdkrEnaDg#Vd_2TJxaKj%h;Orqds^ zW@(*ue*-I9f1*u_hCEO+Vv1^3ngO78RlM%{Ae0Ap_1I>7iV0`#+WJ;Xb}&$R7{)n{XKE>`O# zF63;~4$}Pnge-5uZvsD^3qFNU(=5-?YC_GqQ-`Sh7k(u1Nv|hwe1^|SfCOmEA zwDwcN?$R?K;R}38h6$>%q-~O>Nm?dpn5116$ZMD&i=g_$G9ICZ6+FfhtkRo4dh-p| I@h!^#0H{v(P5=M^ literal 0 HcmV?d00001 diff --git a/server/target/classes/com/wuhansaga/server/config/PortalSiteProperties.class b/server/target/classes/com/wuhansaga/server/config/PortalSiteProperties.class index 016eaee30ed174685c9494a9ad7059c057f7e4af..b5e8cf9d9d470dedc626312e7ca0760be4670393 100644 GIT binary patch literal 4177 zcmcIn*>W4l6+I0O7J@?xge+RHXj`!atI-tym3Z2MV)C7mbh`MJYs;o* zEID?=a6Hp+1#+@hvu_$}%06qaDO0|DLvG1pO!{xif7tZaXuWB`tS&jq%o}H zQ9LH_u)n`fY=NG-YzUkRH|cwHqQ%#0=O%De$2;(ZfaV!419r4KwI#<`Gb_?Fd~PE; zj^Q|CvToKq!x1>$l|gILgD500r1m?eV;mF2^z5>!nB?~`QMOVRQ#g@EQO7ji8D+`W zN00{2K4V&@caD)69a~A`-BiGST68^WdBt75W$?5>@2+T-qMy}qO369nhN8@1M&R(S z&!kfKlxtAfYtq@ya>^N<<-p}L6=}`A(v&rULvaa4a=E6QpVM(37XWAAZ@yH z^@hh{V5Y9M>ff*ZKmb}m_(0jTjLXgXs^MIft2J&RU$!fngY}g9{F<3 zuCLmg#fyezI4qnsPU&;wiQXd&b_>GwYfI9Rb%W(aw1b@3o?kXXdvB8r z#l=2jdsS7I{VFCSk$MFNe0$7r$am;$y+eUx=ZF4fPgXV;Wh0Dwa_P##;vA_gP?wJ3 zHfyZh-q;F*Bb^`_&knXLP^iiJ>Y9w4cC$ai@;)9foG3n>x!~fA(7r&^Z50>+QFGa4 zyXjPnc~gn1(Cu70p*ky1lHYo_oq;>vL8>xn4tedyUiigCBhJQ#>3l|9FdX8)aqHqtS@YyUrhtH?+1sz|+ zs{&87jz81dvNw%l*$*mb$aPuqY=>3WM=7=5{t*vtI4M}*lC;)phC5QW?agMR)EVxW zWzWQ`+YKY`{=a_=mVEHsc$W#0XDKYzHA^{ssZA_VmyK}^O$UqXNJ45wG$0BR*;YgX-$Vf5$M)`^cjxqJWqAU9Cra zdz+(oo zDP;dIGD~ym>cseOk<{)^{1u7YNcP;F_zMz?ljA!m`L7(j=kg?f&1h49LtjCA3xju{ zPZhKs%tjvbGfBG4&!h@T<&$~~`8((@Bnzp?NxRFndZ08A-@v7S!)|=4SjPr8aEN!O zDutH72%d*YTMxx}4mUW`aFJ!P$x#xE6l#s56zW7iir#eQ-xx?E@ivCinBxD8cpHa< zVef8W*4qN3sXJ>JnA2Qdr8TJ{qF5(7SO-~+^g&m0Rjk9TR@=~px`Gl$iRPbtCi$Gn zmCk5q{ooGgN>zq7lbg7M^wbU(t}FZejHW&mwD3zt1)QITy9e@QfEos}2hXx2*rb%i z(`ay%V7X1>71Hd%ll)uE;Yjm?_5!r~G-wQ(5DXNAxKF3nJI(i*kYwZ#`DlAhbZgVH zyIXUoxW1~>0kvVZxqHl9toOtv5%igX&MMAj)hR?A6~|UP*uneSt9W=%JJ_N+z{xz* z!pRr-RCM}D8M@jJ{cpevV(_*C_lKbwk%m literal 4153 zcmcImTXz%J75H zCDSEJc6=gO-1N*^LD{&pXUSZ(q}OzaeXzsfMCWd&xJXl|JrEeskwP+!jDVQxMHUaG zuzOnw0Y@D}7#2vljhaa&PmFisPCVCX>&0H|OCi@n^ogHw9J%4@*pCr`r0Y3`tP30( zkFF0ASB%CRI2Oo<{>3bh>41)hF-lgl(Wq?*JiIOZm8MnpOxr4)3kStMJc_Xt9uwH( zpMlS28?27UaZn&$mkohqVUWICC))kE35@HQK%SZQ40Uv)-Ki})M#U^k&+xfT>6peL z=48dJd4?l!yeotDqWe*Z;ed+wNgYSfLrl*OM6|19TE?Yjec5oX%H^7`NV_a+*Q8^r z_t2<$Rg)?_Qu<#@fa>a7HN2LR1s-aJ?pFklFOdBHD^1HY>&CpbZn`EnK4V$7C)J5@ z-)yO7*O%?J!g<3o944qzRB}C`BY~vAZtifVqh$Kr=)ObUG=(mulb9G|$Rc(3Rvqmn|E9qC>=_4h5b zSFVZTVA2Db)OY@aJ=i9tU%Uf`<`Qw zCmW8jV%{PvcHct{|1xB8oh1-ks%!*R=Jw)q_(BSw7kIRN@0r%Ry=D|jes1X~S7h0< zoedpd#FrQ~>#}7M_48(g`7gxf%gEg)WM?*P>QU_htve&%c^qZxw76wCbN>nQ%7 zqZm}YQA)#sM@UJ{shkU(reA`08Zvx2^Um=74+^i2atl7?!}FH!!v3FRmLiMlWd1cI zv^$f3g?JT-_?^kWKrBq7K}=0cx1YIE(06Tqh+(@;Q!FQ6I*KNi&Yeum>OE zNb{5SG_<#A(3mtKm?%Ep=5PBwrVK+!v>aMK+IAD&xZg*+)|{$CRi^_gU=`e5d<>Bm z5iOaZ9Snq#2=x)wC6DJr#KHU@VdS$WD=?p3dmWKN$udCI8Z->@cbJC~Z4-mR2AN)U zNs*lDb!YihH2X=>eg&!cZD<|B-5=>S{ctHg_<2kq)^}PEj~85s*X~)HSl`)dMj|+g z5J$rX(PH>GKEY=nVLr+KpK|eOe1?XDjOEKbo3G+UyyTC*iSOXM{^)!7A%29P(*0-n Q1%1_r{V(xr{1&OexK)p*$2$}4;dD;U-23i)_kH)f_vT^p+hp(KCqMiM z%fu423$JEq5#qnk#iuS*eXR$Ju@^|f+@7>8}* zF5M*b10$n0FEXKVUYi1RM5l2$}SoF}-`or_$u zdClc@E=yI;?_N+F}^ zMTcuF+Pvp-o%i*UO6falqFvw6zo_RIA=8uSvLdtJ;)F7Td8g zy%b#0kAqw0;vz9q4bxgoIJO9`5%`?&%=;ObYOx1P$?&Pi$d?Lq1E`5CHN?h9SGu^sDyt8h*NydBl}W z_IuO=K^Rg%XTr!ly}oovoTuGz{3$Q1{}lw}PknGJLbO;ACYe1)#ClISZtU^yLkb>+ VIzSN%e(*p delta 1254 zcmZuv&vz457`<<1l9^1VC5=gAN=XaUwn<1Mv=j#g`@HZ zu@pIm8573^M&uJSA@^!ACOCnUGOvwfN;qYLeZ8d6a?7vQD-PzdAUCw(%xS!7;>>fG zo2_b%U6$RN=in^flJ~TXRl?g2-oZKfyEZepgo`FF2=oS`cm1o)mV--pSB~ljbqmY# zhCVxg03SG5!Gb`P)RpSpW>@jCiH}(Dzp^^`1fNpihH;0^T2 zZ_H+!W9BO97*GSFmL^ZiTC@X*KH76lxY=OgU2>3G;s|Twlavz_=3&qC}J2@A_Fe- ztOw{z#yBthYxLjXO$z!`luRs{>Rz>% diff --git a/server/target/classes/com/wuhansaga/server/config/WebMvcConfig.class b/server/target/classes/com/wuhansaga/server/config/WebMvcConfig.class index fdaa3e75332128ca704e14132d28d76597cb6543..4f18a6eafc326ec219dd1c23677b79762cb50ec4 100644 GIT binary patch delta 1467 zcmZ`(-BTM?6#w01lie)K*OEf`5Q@+O36Qo}Y@wARO(_&e=<;Dus|(pea7k!3p<=CR zZMCi6c(q#UM}6?snW~dII66K$zWd^n{STb+$(fGh*$rdcaeUZ&&pG$pbAG>b&fUN2 zE;mGf`Fra}0Eh8~3>VxY1O*;=87h|bH9c(Vsl{+~e%V;aGI$RqQ_1WT4DR-h83_^z z;b2gPj1m!wf>M<6O4lHtbuG77JQP98W|FBz2`U4l3x4bnQLUf`fsM)i{3}-l?{=>p zuA_j%ktqoc3_>ibk<>`0*fa?{DgDvNSY#?9;ZX)L8k-u4PH1+lRt38d;CJ0sEq=5q zXh(pdOgGK+StD`W&=W?+vi*VzLg?f*!jk029tC@`k6#hAfP}{wJS)U4?L#jf7jZzr zLG*2uhN>7!bE{@rPiWb6Mqe}-R37vC^W`|CP|>Is6~>vIZdxOYsdUB|(k*h?(LQ#+ zctz^{9dja%FeuJJG95maGz~l3lM05=#~>He#PsZvi~&UKE*$%xP&4uFAe zvijOn8yOI7H69X zOG&uM$#RBd5lbSH3YPH#!wBCi?BhR4)oh*rDqird*cVSqNb^%tTiF?8L|6*4w(Iz| zYd!y6s-gK@+n5~Q*vd84w4N)5@3xAq=`+&{x_O>PXDFR8_&EE9|0ewGW;nt32t9T( zKIHqdvfPXJWpI2T;zK*@b^eF1jW@_QcT4z~!Nr(_O&Ye-)Sx~_9UDodjLeX!Tb5yo z_>|w3gTm(wjl5ZIjLylIL-Aj_sQY}hof04d*3op?D&C`Dm&cRJadTzA7 zOn1VxGul1DJ7Bj-aN#_y_A#K~6=!uEkjDkm7%n3JD!JLWuTvx!?V}-8EWjuHfbzIo zt<(yrl8SPz78lfdE$&et(c)gUNsEhWGo80Q;JaHWpu>-@0>ZQRAv8jy$ko*N8bTRB zKWb?N>kvVGp2o1j!B$;Nzm1K6;1Vtq#@Fbohmm3fejQh~@%~A81+t~op5V9GUqJs2 z2)Dn-K%CUUJ2*PtS-|in{I*Fw@g2sCcFnfWOmuyXxdNWu%%jv6x9~hL5!z;wAXcY6 z4(qNhn1IbZMaET!l-sFmH#G^^NtJD;e^(1pY9(zK{TSNlWwzr8I*3CENpxZbT@J@! z5%RwrQ?M@KD)FktG_K(d;?|1;c$3=g##?e*``2d*tw#w>8YY#T1sUXR?J05K|uTy80`pER*RNy1XgAiq9~}gO*{2;KMGC1~iI?%1^sgw2?cNNQCe#_A1!3ksa`J zM6qw<&Pvz*rx4Ujt2oHOC_aX61zikj@u!rgoI{97Q~jE?8(63FrhL8ZF5yG>yAYwJFvvDi~{vB zONKpLaJTG23(rO9O5Wrs;*x0d&$e3(;Z*$=Y;TKi!B$Xa$k0}fh`!)%+KhvWc<8?t zTzB)%tGF!mKzHz6yrtP;mnR2Z6c!#HQ!R;9dXj$4bK%Vsz$bfsBb zm7?NSaEm5)3%3<~BBn##)Tf9~#g))^y*mQ&^o}JXtu?gE531Jg`y+?7d?50imRBN2$p3;|_q(w#%QYNtLVpdXXCFg|5&;kZPK{fs^)YJP zPp#9WWzgn9YpJ*2h6Yr}Foa>kI6|p@Mv4n~6lb;p|3!dhvgupMh{_a9QBK>AP3!jnxx%YbqUy{u|4}q`o H4ch(#zEm>8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(Ch}@c^fj^MWn|ziFU?5ID^5&LWMtqAc64`)4|a9-_j7R! zisWDr0E&U6bc<7y^Yc;?iz*ozSe)}yQYT)nc4i0K$^gWY44e#H42%riU>*;U&xge4 d2g)#k+y$fsfhzQYG$W8^)!NR$IC&zYE&%H=B^&?% delta 178 zcmdnTypNgp)W2Q(7#J9A86?;lm?qk2iLo=VFfs^aC6*=X=OpH(>-#5Vr6!k5OfzBR zoH$$Fh=-AZuQ)M1QMWiXIX^EYv8a-ffz2i}FSEpsk%3u5GmMde#W_DEm5YIyL6C=m zmw|8M;&TIKm_S;9G(S*{Oo?;tJx#6NI6cQ>1C!!8Mfe#pMumvf){oadZ#H-G>0 z$DaVU&kkr6kSSG+=1*>_PdKur)7h$Y~))OAy3Y5cH!yfL9S> zSndju8Z)XQ^fUO>VTKJ(H2VfmN(mzxc4x(&X;Sf801L5*!Jm?ho#Q=8hK){3=Ds}a zNQxmF<0iSLsU-m{#p?`JVv@|PZgOAUIV&9JTYZD?b2-C`CXa_}2H zB<{|}09IlZH6^9AWRM&dJiCQB*WTL!yn`m{=i=$4*(p^UFNkQpJ7A}XO6JhEBWU(x zO#m%e%dpPXQ_nF#ymL`?q|*$moS?m>5y3jnb1Oqjd4_GgQOnjsbc1k=0(w7*dmcq9$fYni^rQ9gtIsX_ev9|H5WlNkVCJXUQ3f z?a_83WNCkvVmc$mWnCt&I}}AVL_<~;f*p>@s-TaFDN1X?=mtR*bwMl+5cZ8onmLy2 z`1NciBWmLe-BaJ+nYsEXH*xjJjayGACvul>&z!y3V6)cn-yrON_QgY_PUoggS?7v&uRVN{0sSq+2R}8OM2QnK56>g`p3!|(vnq!nxbA?d_R`Z$axW|s1 zXRG`{&f`qr9BHp^&*0~qW%)|cql~&#zfdf#W(L(^sxAtzb5fGTQa7MxwS?3y^JB^q zm(P^7JSOQIqfF^E#FQ@V7kRy^R;aYmVIz0tyWHhFEtVRmf4wn%_n&8A4C^+(G1?!joqli`}91& ziUxqXK#f2T{e1WUd*~jdrx;D`)v*`*sG*O3jaAh0A^rLfW5DxqA@=9N?;s<5&43C1 z0T#F*Uuhy=WQ{8z58!}_oTIFvl0`QQUED;sxQOl`p=0>y2$+sTCQ3h}hQl<2&S5x` zhtgF7W${BSE0S1eE+3{(poj;Yqc}$P@^Fq8;Cx(4)^U77ot!KahDZ;Lz7@P+yy*gC z9l>aQNf?7jJPTuG!7-(5tZ;#`g@mtd><^b<~~;6r6y;F44G&etf7TG6C{sY88m37U!NJ`wLWUDr-pir ikr_VVQ`6kIdHu}v<1#XJntDFhaRy&d$Cm~2&i)HdjCTV7 literal 5034 zcmcIn`)?Fg6h61FrDdSCC{NMy(mp6tKwh>WrKPp9EwzOrAmViQvK_iRQ)XscD?U&H zmIQ^LB*eskA%?_6AOS>a^mqRbmeQa24~*ZP*_j>IS$1kPgz3z^=broBbH4N4vw!~e z+wVlQlfH;h38Nh`Jta@1M-VpD;VTnFy6J zsyV5QD{@lN67v4xlRRcInyRO`J_uZpmCvNzM1}#H{QA6;SI7&*_)8W8#{nT9bAlTX*3fqh$kWjHURHYO2FY-mYo7rC6%2nT#5u zsxF%oN&@GW$2ZHmV#-R+K;A#b4ciueB4#?3QjAGPU5~%LJ$vP0X6nk5>o=cHPh~FM znmu!&&QvYlp~rdMlRv(C{P4!iPgiHY{PpSd#YYdmel&e8Gj%m{?&j>-o9_4pMsGxQ zBO#k(BFHBUCB-LnV^p5t!}74I#eGQRZf^A|V`Cy2j8;E;qJBjzwYc%j(YA*6J-|<; zxoO#M;C-HfZ`I)OQq%>3I^s-~cv&h@IaO5Aa(X#JD;U*>rLsgT=@mwj;9!?-*u}%> z@V}#pkFXv)ZBBd4Xsx0;S{Mt_rfe8>L0+n2StaO+Luh z-@IGbNUcjzfiour**L;$FSkbYxJM{pjwHCXXHsmr(H|ju&*HLhaIR}YRW+#ORN#|a zKR!Ntj#2rzl1wA`aH+@nReqB~&_UQ3RJJ5S1 zYNZZF>%xR-NR;$mQLkN$R@D~|TZI!JXl3yvFsew8#Zg>>SKr-5NZhD|*XRDU7Zkyw zUWt0d;VR-h31zm)kgK;a#S@&g%+$5nt2bPD+d?O;(}v;RAOhi_M16DsLh(*u%;rg?*uj(+r}R+f+@pb}>3$;6#32Wcg6w%J*BkSlks2h{1|%hu5Qx z2Xw8q(WIUl)<@A5YN9{oaVTmjO-N+WN4S3Kg^Q{|J#EBzmnyoFr2#)!HV6`;i!0Is zTS~%|4=AGVEYr|uLNYR!zsX#>-RzXw%+J?nE}v(#J+v4NpxMm*Zi3&rEVWxzSIAH| z*&k%$mlCZ)1&gM&gla{ninm%(&iGq}nMyp%X}&!#(E|LfhUG%cRGU;oFWBZpt4lGm z2>)L^LN66~T@2epa8@RqG~T5pP3u|neOmT_UcHT>5?Y661r`%J-`DVLbWG`Ws>heu zxdCHhzM7h7JywXfX4(M!GTs-I!hkSE7!*x-3vKkkZ?eHJ$${St@aR~M5;JKF&P)_x z7}$yzfpj-4#Rig%^geA1fVswox!AGuU`q6+4O2iWXZR3MTB*&0vNJ!9yXY+#c@TEv zLqO=vgV6qfI&+b#vbSwOrWy;t=%%-^a~4K795R&ib6~tf`(RWQMl=9M3t(&v52MeQ znEm;Q>8E#rv|wWLqcRWxXB*&bF90VXIR|OTOU|KuIPdv*a@dZJBzWSHJ)bN`n(ov4 z0c6=#0FU6WmnDa{!xZ!I#PjiRki`v;gU9CWZlo@sGy=+rfbeu8JbMek=_WM?$05zh z=fN2TY32YY831P=;6%g2(Vj;h-AA6W9GABih|Z}1I0Jw)SO87{c?>e4KNdC++Lg|3 z)QjpAs#@Ln3yn86-J>Oq>+jK#I~ei{U9G)Oonz`LNHwzW2w}A?#U*wTSC(M71_L#4 cF=;#c*e1scEI*CCKQZZ3`V14Fdl@kE_(f|Me diff --git a/server/target/classes/com/wuhansaga/server/controller/admin/AdminProductLineController.class b/server/target/classes/com/wuhansaga/server/controller/admin/AdminProductLineController.class index 27b793560ea9854bb9a2f8c82d7c3aebb5608967..4954035d10319fa01ec240ef0033c4fecae467d1 100644 GIT binary patch delta 1757 zcmbu9OK?+F7{~u7x5-V?dy|;Z#saCOqAf`v1f)CyC8br2wp4sn1Vq#3Qd8PeOp4+w zB39Wk^^6N=+&bgR7gEp}9mXXy?%ld|T)1)T_&?`fQcUT}#eIFR^E?0VJ9nvXsV{lw zpC5k)a0pjJ@WC+AX2FlZvOT(e}g?3m1IoV^UmOqcnGsZ|Hf~bj@g$EE9 zNXeK#C4V&vNtLp}LI*kp%xR~7^|lzw8Ml63YLeg)VFqFv=DBvT`VpiB5zO z!Ddx1C9tJm{%$7aZ6i2bPzeuN=uruQ#f3__?gY^*U^y2Ss|$0^e7#huwPPzDG4ZH{ zKJ*LNGv$lr++w{tn;R=H$S*_r&1r$is&%wltE<9U3)`_n{v9f6u$>n2*u`}!&a6{+ zb- zemXZkIpa*#xyZrle6>DE8Tz+Pd?F_OZNuj)jtsW_aeY#JB}ATOcLoXqzG_A8@c$$S z1LN{HbB{Pp!Af#ps6+l4xFR1^XKse0ZGq0E2;U zJi&X~4a8AA$uFj$gr~IM#?u&OhO&*}7)y?$!4HEGpbxYH&+zi$IG*J*%D3m3`+SWA z6EwWYtJk3A1h1D);^exo9XRE&7gd#4-NWVdiyvyU^~FZgj6 z?`4gbT*W&>Jb_nELDcZ7#xw;DWo8JD_N2!$(!!E#+`^_+9m9J4G{w)X!!v~n3wk_L zO&+IJuCth?Q^}<{Ueg>sYdIR8DBbtr$dhB&|KzA*W-Z4#%zAn(HN3&<%Eq_+fQNm! zjcvy?)Aki)JSamCS%jhBVY9HGKa&F*%pJC_X2ZI?hJl*TVV-hY9JXGZXYK;C-3BY) z1=rW0^L0ImK**;%JjXb92y3lfu5&kcyS%8?wSCPlyBg=4bJyDI+{aK0=a1&qGkjFDSZ<&vt1HG^t;@cB z&&a>Sgd*PcRvKeT)vIXwCJv@EHz3m48`%AA%UTJpRR#a!I=0!vC}+d{p+xn+$fw7h o&G92fLk#b+jtX$u-`7h&TxzIb+q9UZSOfyK1*8^JunH9cFM-6G64I2UAl@QM zg^iA#GcFumxOPEP*~TS-o$O+#syMn?!7X@0{p{E-1>E~` zg=5>he$Y`_Nx-j%q53M<#wKYjBvzZ7~;W>^U7267kFN%;3LqZd9( z+l*eq&wmFk+o|a&A%F*rInd*vB*gE*Q|Mf0yMeYRn99k&KY9z{fx#-eR#16(nGy@z zxw`2KbmLL3(V8WC(Z>^g&`+7x`!Rq)dg$E_JjR$Yy?4+6RDnX!Fpfk6`;fsNZerg_ z>;jLUhNzS<%sT_Npkx;}8tEuabp~mWR`J9N?!&pw;M`ENYv7dFYjA2zF2RGwlEl6S zmi-1xqmIl!f+uO!z%a^##&Dgp`kxzsfn zeEu7puGjhz>)mcEj-9kk~_d?)?Y7y3kvx^Q)`gH=qk?oMlxs;g91S zoiiq<=7ZK{8@ku(-1Azd&uJP6&T*4>ueV+;huOx}YP75Ti+8O(Kfgw;M_KE!b!xo^ z_X;>nn6(+6YsFJUWpxlrm^X#p#p~%Y)6~Bxswl5P{c)3C*6ixk7kpUWWTv<1s|WdQ z{&k}!8Bf139nm{@CpvH&;ppIPT>P3MJ@vWOu@9M;k(zB|oI1#p+OyDM-X+Trngw_9 i{jvF3c+W(-YOc14?(Z}C2PIr1MSu@^&|_Z0^}hk{*5hmd diff --git a/server/target/classes/com/wuhansaga/server/controller/portal/PortalNewsController.class b/server/target/classes/com/wuhansaga/server/controller/portal/PortalNewsController.class index d2accee0676783d326fba4b3ec4140a77c0be36c..26c39ea41b313f56881fee6a692c2fb0d1e61060 100644 GIT binary patch delta 1053 zcmZvaOHWfl7>3_zPkVZfr%mi8AIQ)gvj z;=-jdksy`0@CO+GfE$;(b8kqD@0>#`F)U`jZ)U!kdER$suXe9C{N>N5&j2oA!GH^H z9hwCXyaj){@N+m|!Usc#Y2gSgf#eI3lwIy|p9>WhDiJ8W8e>frj_C+ms76SjwGgP5 z-wjLdx+~>ZcXve%B07#+IDuM$x3Kx#<~{@ALujMvb@HNOS-)oP+^XRxE@2z}k{?5Bd1Gs4bH887Ep4gEVGHRe7Xk$Fj(Tp;fu{!nv zB3^_(!Ni{^;^;2I@44W@1@BrIn-k|b>%licT3P zFv&JGiyKawFXcCJYhTSgZ_-#ADyf-t#1wJv5GhHTn6jnBoLyxlp|X+?Zre%>_-%f- z&2P9^kO$XF@OS>V{O$qEr)?43q(scveG>P`s$L*N!HPK;`-oU9zJt10Vh8?M%MQdA z=bdli3_7oz5`h02O+nf`EcjhD$;4!bKDjK`B&4K%voalRykCAiA^h7Z`F@ zu3Y#BG}vlbxN_w}*T#R~&ZQv|-!oGxQ5R>$k^N;6~kLK4`lIexD<;5+zsP)OD7~7s2mASzEogexG5g*!ETDBli z<-me%;}~j8R137LS~6wFf)0+OcKchZQlQ>}i4q$p(P*MUpo2jX`BGFf=oC)NUD0DC z;F@Tb`=XxC7PQJ*cCFIC%CzxBypsF6D-A0oziX8{GiFpoRP##?f-r0hV#vf5fkdIM zBfn^-rD|Ul7)i)yMuYsNHOP;~u-qtF5l;){J`;QpHyzxLC@-%N18B zyfR$o|F%09H(no6q zqZDS7P>Ikz5v2i7#4!8wT=8AUjiQ>dzh|5}G~;nkm8EJ6Oz^2jzQ7K;vJXT|_!{y^ z|3^VPN1F5$xLH4~C?Q&u5XGb?!QzM&c)$Z^Up4(nF2S2LMfWsqgKsmcKUapj6-(HC zhr4b|4g+p$4s~u@4zV}%YfxWbWiTe~WB3V0iZDk}2=K0>5*t>(ZGnR03-bP%To#vx RIj?R8VuJ5To3n$h+v)k>cn+@-;xrs^fhxUBsFZLr7_kF{H=_&D#?~&-%`~05t1j8sTdP4lE-xDi=$KrS6 zJMq-~K`d8%vy$OnCYFM4tN`r!M;aT;u&;ugU|8S6X~yFy>uzdivjvpk_9%?KJ|1&TXBR&Var|yM{$gXv>=Y- z1Z{Pad@oo8r^xX!ngs^w=fV3pO*TT_2b6aviy@pP=iG;2Sqx)@f^=~hXpGSjoF{Vu z7Yp1+X;DcLB*0j*X%*Jy0;5MU`Y9VoDz-X1vxpYN7{*mRh>!3w0Z2B(L(`y%HNJ^b zzDWn)l;VqcXc?Q&Qh*NDX9;O|n#$2(kVw(%;E?Y%AuSm*~R-^^((nYqJQnt&M z18!Eq=~BEaRKk#PWl7K>?{Hz+SBAw_t-vx?WSLVemg6Aj9V}N}5As@BpjH>4&N4tw zaV(N*?c}nh>MS^bu9u3l=*qH}#5w4~k}AVul~LzLDa%a<%Pm)NZkGk>bO9Q$f$aCk z|NrWIQVR5`1L#hvI6b&auSa%@S-P7(veCrPIGjl4p(mR1h$WiyNF>&4RvvqwQrP+Y z!V0a;E-R8nRfCexGpbsYd>T>NkkvDd$_`6yOkT5UjZ#CD6rym50wGv5E#LNMWIb3? c-_PYgictsm;tLAh%i>Gir^o{u*xlseeb%7 literal 5011 zcmb_fZEqA+6h60aOP48KiWVuLP*D3q87uF$6lf_}*+OkAXhCJVJ8XyU&TMC9TMNEb zURpj7HAqa1A2cCqVpNEotX|I$_Ii~5uU9hV}WJbHfz7Dxx%!^qEbGJ1x zDzgoS6;*bO)#qf)wFQRC4MmN`<<^0el1#{|=@?rAS(ooN7z`OnNtZh$eb$t?IIb?w z1{e|Iiea|cr)IRHDm=?+m#M>dL$$wA(3#Lwu@gp$yOfwJnJFDSo6EP*nDLo1mADuN zoJN0#;7l=xy^(5Y!aqjqI#ZZV$R`y;>5a>WR8=!2Q_)m|QFU0+L}N&b#UQJ}9ik=~ zqBOfeJdu=jYc1>qj8q~a>BEdlrzU?)-xx`cU44A#{`7ZWGTIr|^q6QQIV;fPT|ix!oG^gL|}&(kqPew0@6@GnHXU74t*BD$owv$*6>5?MU@v=#!(U0aeu=iGt)(p5Dh(iC$Un zmLNGS3u_T6ep1pE{@Z?8VD>4{;6Z;)=UngLFqm+0S2jOSfxF9;BK=UF?K{*in|)f; zQ5SHOT1U&&NPYlDhuu*KYmltVbeoDYD(g$K$7tk#F!NM}fS?SV_(mF{}a+rjAI2?bBjO$S`nmHIvSuOjBwldTtS{2ft$BWHCM;$xJhz5sYl0% zUpD>QAgPdxWQ%mnE5;Gos-l=*G%J8)cuKU+>6kFpzY%^*92NgLXZY{%ynd*FQwUf=2*9*jouG2blx)RS^nvK z9cJm|Fmd&mcJy3l$wqHw<}7yP2IvDGIkX@9az!%F6{Dg?MODluM*md#U%6R67U=kM z+T^+v8W!K+QL@ebQk$~WWtUf@uC2FQ#x`}(r^hV|$F)SS){oXx<=w0tMN!PBPXxL^ zpIQwaOa!~Mlpc|fD7;(Qu)vqqb}m^)RZBF@rW7;8ZizRz1uB|XTv_RB*VCWhuFLez zQ}=#JKf1(d?=qTLe2F+8c(A*itycd#+jEy@KOgO{H#E2)0nKm$mGPDqPi4FrutpS4 zYeX_(T!ED(vM}DJe6T)jX}@Qvv?>!P0YaS=P)TSyjX|7iXK`|8}KHE z<#`w@YyYD1+6mhD4VBj1r7d`T@gCLQ=FbyU&mXZWpLXH@RTjX_$mvSh-AcRht~_If z_RwDZf<4+tufb6Rp7V*VrA9myB4aQxd|Nj;un%})A9TS!WWipW=Z5V$!7sb70pewYuFzFXjN(V8c#ZuB0risK diff --git a/server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController$1.class b/server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController$1.class new file mode 100644 index 0000000000000000000000000000000000000000..19ee0831bd8090012c4eb85f310fd49b8b2c148b GIT binary patch literal 1332 zcmbtUZBG+H5Pp^x4$5KADhT+7dTLuN%X3hDBfzgj?v^mBubYBsEyXgn%M6p{`W`>v{{+@5I|Y<*$-`wIx-4h&DTOP-TOxL9KtjZgc+FrG<_A$TrqN3~vZ*H$Yu)gE(IgtT=b z+qT0{Xrw)T7CX?>nS;FGT1*^QWiwHRrsO!Qhr0|*nT|w- zN;fSLHtJa0i`GcE-6F@9c+(fg)++U^nN6c90n+rx6{DZh$SIOTU?eM;COLx~$pBYzjkL2|PIn&QI&M&|n`DpWF!5dSTog&u-RwbqY*hze*t(^qO^#A+dwm{Re13oD!)yXW3QrEQR?iK*u?P0CO0!TGduH}x!?Wz{o^Nq$EaiwLp+UygCtT6yFE2_PbNby zLq6bcDD+flx2L4h%J<0(ls4RVUj@G6{f-US{{>6i3@J18!qOwE)LNue&Ei^ekU^Fq zJ>`DM7m|TBvv810SLD zF11vT`(3U*`#y6f>{c0`EQF@CU1M1G&X>ZlG8Z62;Xs(7>c8Z6r$%V%owFnm(zJve zm?1;FTxpWGV|Z_Lz=IjkY$satbI*>lHkTz2?bd1XJ=ybBNFVO3R~ok&b{64`gFCp( zkc>#naAd#lh!b5S8vDYyLt_GWpM)hYIS$3Ui3m-t(wax3D4U2AC>e@9X*~0u7P!== z8~Z9W3{FEzq3b>mLlI(w80*ka6)O}hZ2{8sPgxH=d0Zx4B&&@$`6*nze+pLJJVmY;R?wO%BEag#VToQ*_t+9z%{H<&Ff_6sN@Ih05a5;;RbG!wCx&5 zMCrxqH>5KkKOt+4&qx(<@e9S{IB)qPYU!Ni&syH1oFonPG(m;d=_N*(Hc2P2g%a*X Oo-LF~XX&DymCj!{VKBu2 literal 0 HcmV?d00001 diff --git a/server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController.class b/server/target/classes/com/wuhansaga/server/controller/portal/UploadServeController.class new file mode 100644 index 0000000000000000000000000000000000000000..61f40d53fca69158b61ee0cc1425ff936e3cb8c7 GIT binary patch literal 5912 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 literal 0 HcmV?d00001 diff --git a/server/target/classes/com/wuhansaga/server/entity/MediaLibrary.class b/server/target/classes/com/wuhansaga/server/entity/MediaLibrary.class index 8fb2772eb05b87e05b64fb15b1b69255e22de9e6..7ba4dc54957b4bc81a74c9763332945d0a687888 100644 GIT binary patch literal 12007 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 XrqHveFf4H-Z)|-br9?*HU*G=&akOcZ literal 12102 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 diff --git a/server/target/classes/com/wuhansaga/server/entity/News.class b/server/target/classes/com/wuhansaga/server/entity/News.class index af0abdccab169834f9a0b707480c19e28c3fad2d..16a122d5dc809a6f30ffd356a451a2e37889a83f 100644 GIT binary patch literal 16371 zcmeHOd3;>ebw2lvMziQ?U!OK_BU_7YdAE5st2YFeZERx_)3g~&Q){q1BW6YhH?*Z8 zr6nb03&DZlgqFrFp(Lb$fzUwG0&TjNv`L|)kkX_HZIbRy1987|?|sY6JeaW&f3?4# zp6#pU55=y=HbQnaL*)B}enA+|g8SG?gi&3&%!x zrmo4uJ%eIw64X09?j708p^ePdU{WI!#V3-5)S+zd*w`ein@wt=RzcBxx{%tOolFU8 z@wx9UcA9xcbQ~)x~&=3^_bMlx>)MkiBxW;ppgA0>y&c7aI? zrFJ5lDd58>Y{H}gzgA(Fm^8@R_(T>Tee6i`P>P!yHfe;_bw^T#8ctXDKE zOj^nMX2x$x~nrv<|&z(5OB%3y(Z|VHD zRI)IeOW`%N`o?h#AMa2qC*Q=mCY{INx^#Z`?7``Dekvtj#RVo^$okmPbn2ST+1X5i zsW+RnMQZceTwzykGL>WPHj}nf=T_#-=59^tJuSxruzBZRSlFS`u)qaz%;Lb%RQ`6g~ zlZROMUXu7HAM_2NS|b~W z4lsDaq)EcZh#g85c<%G0Zy6l&!R55)6?e#_Ddw$BF=?K?uQKT{d)LEzv%47Ba>S$z zWtC;j_a@tmxSe;&9#@-`V~+-Kjd`z=O$C!?*<`}B-+7~KxW=Sw9m8JdrLy5?O!@#D z;_%p_29(u5Ytqlr&ttwoz1Ll(ZAE?3>y+WYVA2N}&MbO8u=+zL{bG??jr%W|^vkT~ zUT$?3EaN|H(yx>ll*dO*`c=oU*;%&iajQwUl^B%A9VUI04RXNU#mg=qGwCk2@bHa$ z>z7R*H|g#&lj8e?N%yj;O?wrsV)p%{NuPQPfMWPHlYX56jhew(%k2CcCViT1Jlvc0 z>SFzGn)F+a{&Ky*SpON59;DyapU$_&dYl&&u*%r)vnGAc@l$-f(Ae^MlYWO=;_1Cd zt~J&^YSLq@ZRURIX{(kNTOT*+i6AR~UW2}1(o^)iSY1=e{FK_|amI|b;ADE*q-W?$ zf;x{R590vHVAWocE&!Ct7m}GmUKla|I+P2mbfNj`dLsTG&^X(G@1vfzs=}xR%ple3 zTN-3sQO+9B!E%t+__tH75>%rmPveesCbe_+$iY-@U-ICz3>x?t*`Lg%xvrHpg{gF2 z(83*+f)^YiJ$rEAVF8R~j;8Zza9o(lWD7|?nnBUBV>)}}VD|9n_EaX7!|b2rgEH@J z|E*<{bZ9>!A#5sB*~#6>9L}IZDhH-|I62FQ&y70NyX6mbK&0yn% z#oaiIs*cs&B$ZWH*(&?uZiv_h!R6ZqOBC$UrV&M3UZ9%MjT-H2Z>mNA$=2Z?HfMJ5 z$Z=PE2b$`-dyJ{7dw8i)bT&&>bGAtRDSaDbuWmD7@^Z^ODBgak-m=;S)yV6U5gQ?Z z&YM&lVY!Y+LEuRB$Fw?>5ERZ9rcya{m#1mMiJncVb*qiih+RtWPop4iK{UuS0#; z->v)1aw02tY391>pnCyuJLuCCLF8mr92(-WOgJ%y%i_~07On8H_%-sQdY1<81^QNA zlLTRpaIO&UyD8F@z_>yE3SAiMI$XArb=s*uBZEsUfiBDy>>^usTk+O+i`RgstXCtT zV;Q_11#+$qc)JoXtAiRB;3*n?4EwN2dt>NZ*9xSZia>sqT5IYCfn7xP#HqHbW{QFv zY;L-{CF*i84@v--)%AM|$%(_`$r*hzg?H~68{dk(VNBj<^0U*pe@EO!UzhN&?z)73 z8JnoN_cm-v3E#quCwxmVnsAp}Ea9!JXu@4ZTI3GK6TY?KR+Pmz-{T42%tkMLQ`k(n zbMU|vhSsYxON*?QOu90q94d+QW=|~PO_W%|n-gf=_wwtsMZNe)!g-~Q?npXYbg_n8 zj25!$sKqes&Ccc~QrprTQ^fdgx14hsm~R(lvxR&imz)`wM|!@oR&0xl?c(Byz`gew zafzUWm-a|!j%E+1MiuR58P#q}P85*#5Omys=4qfJy*QbfoKEEvJF?lsvojlgk(~|& ze3~N1eaB`}0q`q*c;^D^Q)!CL$?0j1KsH9j4k51N4?U<3qjSa5`QAk2nlp`9*3-xp zw`N#$r;)FsEbcU7i#v@}#mT5}%{PsTs)~iJMbpT^_>>;fnMMrq7LlsCi-@c4BI1g> zh`8d+K9-%?=jnOAc^0RpW*_VI5|j=_8%U{!`#gkYGnPSsxp_L7&!_Scu}jcE*{lkh zED>>;p#HaqVyjUzix%Lf(&NSw(M zsWMq2IVMYF!(@r;uVRI_X!}XFD0t0NQ8t;08vvZQGG=sq-p|)+DeHU zDiR^N6F}5iO4L}923hrQ|1y}quUdMJ zk6rqCW%Mru)6cJ#p2KdJeqkB?SA*#nRZGv&yh}e&M*mmA^oy&d=SzZ1KUhZp*TM8d z)zb6b!=)c7qyJhk{nBdb`AXx`FE6A2dNBQHwe);ba_Lu=(f>^_{icusFt3ui!QxgM*ng!{ibT^`4;NZpI1izjbQrotEK15 ztxJDl8U5b{(_d6AJ>QvK`YmPjuLQr^t<}==RotcDUPk|FF#W~V((?`9rN5+%{+smo zK{MylYUw#~;L?wm(Z3cc7hCfZ= zng>U|MA5q`9C~o%8H$cC9e#{{QdS`x+_@CL?3!iIQ=L`w95tULbD35182z+^NZVmR z(sr#CW=!pK)N+#Qt*}+=15MizfTr!J6=6_RgCbVc2b!^C0L|EOE5@L>2F0wn50tm- z0Lt5@RmUJxgCO}pN9}rmj@k`YJ%buFsNQPufsWaY03EZNtVRYkX;7op+LqHl|gM9)M~Z)KsVU!0Nr4BSnUkz(4cm!!w0(2?gZ#Y zyUXfiP?rXET3tTSO|}KlO?J0sF{oREEUViGy4mgl=w`du>S0i?2K89IKF}?8A3(R* z{Z=1?`ZcJ}>i2!nXbdNm%&^`8IYk)zEHE6(E>;s*!mjHCa9<-J)Xi$TeSc5*$efAJQ z_u0eN5QBy_Xvo66cBk+C_6R`t+e@tx1})W~5guX}bkbgi>PdUKCD*}n4O(U`_kkX; zM*(`kUSW+g(+Uk5wO05*57{dLddOa7tz^(D4O(ff@_`<HCmsX*%?A z`T?W}sk`X5NmV#IinegvsSTw;8I-hk99b{mhT> z*7z9x7*e~KHEyNTkUGRijjNFi|1NckyN$y_KN-95i$%>3#reDi8n+9Qok`MUKUYE^Ni)`l{%Jv^=z%9u-}XMnn7Qv%-S3 zA~Z|4if%|NLm!|Iiyla;LU+?)(F8f}SkP@qiHc37Ga4@jq|6?RNB zcC9qkx+X*k$}4Y2qzM6n_KG;Bqjpr9qOJ*HgYr6N$D|1ngZ7F!rt9puG{s#L;t1t+ zy1YeJ-<+Pc|plqLij+N;qq z-C{RMQU2ye?JjBRa!m+dl-C2cB~6H2 zw3p?W95*8+da~RP)2+8IHpJJUTNxeO$cz5*D1SCnh@J)uRdw&4LtJ1 zay9YwstFk{ibW!URTDP8E(RbO6gOTFi?NbI*tDM%OCZ(IdB!KjAfzz8*Z7baf>cWd zBQ1s@Md%h|rx<}0r3Z}FVkx8;J!^D{Wsu_Zig**P@{#u=@l7!b$rK&pd9eagy;vz8 z6e}S$;EM>iiB*sq#UXJN8!I1q9~4)LHISOcz2X9~7E%iinE|m5Qmc4D#Kn3@ZQ^_M zeX#*jyAi_?a1NvnBSB9H8&aonKAjL7A$1uC=mxO~l4Z=&lsFesH;%}0aUP@|<1@5M zoDZqjcn$~U1(5m#Hu<_!wC*%@QcZ-S0_UGWLY&6%cy)sn?G$zZ4yLA9rD3%`n1?LY zYH*|&?BN3p+9g`%;&}zzv?KoaM}0ux{Xg>a*6_au1)H^d{4MNW>u-n9Bz131;_*}f zX)5z=sXVsII89hziO}P$3aV*2c#!i7?r-y>-$J!$P2N}?x!3bEaL`RORo#Tw%9;7- zhMLc$A+N17cGJzZoMCfbi)Z7h8*M%FM!j~=(pfj%c2-S$t)IQW?m+w5cEIbyJEG9t zKp0=mdPJjvKYE?MQx@Hs&Ue-sZ)E0xNOuW$n|CrkYS8p3%?+3Cm^Bw2^G0mW=ydnG z=cs#L59g9mcd}>hI_dRuj!AV_d*`&PUT^1~S9iE?t~>1Y`CXyb-R^%Ey6yG+-C{@Q zi@(4jE_AhgvbPg!sZY=aT43vV;h^CTUBrA(MazJ#E*QR zzfV1Ns_v;%_3GW)ZnwVv(}x}-qBY`*I9Y;bj289`T{|(B$(J&_GDD?oabLDLl+BlO z<^4k&v)7j5R3)hK>dd~((0C@lYiQGstFxnJK{a_8hj+p@;u}W_`CY38rA9O5?5;v_ zKid;vzd2EcK@}7;?5HE zbEWm!OnIW1#RIhjo?;l?*_AEgnQL>U%@aGubEPrnB=_aA*RCy0@ zVlYOF(8->^A8=ytP6JcAbX#r@y62Uge7#F}DuPo}sVlsyu0o#=rmdz&hN{Way!Pe=jHQ- za)t*B1JOJ(Uf8pvuzTpjY(85=$9AGuRs437Bxt~`Fp|q>H%{!?ku7e^K!WS> zlWflvbDTGYRpqf9G-r*3`5@Y;L%-LeJ?&N8*kYUF+*mCvTRj(Rt#~HmWK3UfQ-YEh zLePzKaPcaeQWeGP@?5;yrdlqx!CvS3A{)-O$)04;HO{lC&NZxcy_9QQU{n1hgRXI* zO$}^NkLLL=SGm}xMz++W^$or=vuT4(O(&SN-e#Mc+0<%kRk%6V-D*?INeEhDyG^Z3 zXfO)y1mMb7*wn^0?(J}3Hndd?xH})X#?RT*P96FwhW*LGrVrTE$tE7&?e0ur!>CP; zYuM^e8#a8gH~7`K4w;arwASJ#Ke3Ur(BDx4Z1)ljaxK+iO!V zP1BF5^|&5eN;XYr3(ue}YUXk2KAUE6JM2~$=xNBs`)!)Z-EHFT8n@MRlC2-IX%<(S zY}Ie!mu#BN)?~?_sx5t!XKMd;EWL1!vBJ*HnIfipIa|bJszW8WL7wBa$osRSEhu9q z2MeXZ@>WbQqZUF~ya|98=4V~2=j_^QvTRj-@f;hDfXV@Po>ag!S`DMZb*C(5c7tKN zZmL@hI%j+Ed0pS+2j;E>d{TGa^F*EX{7;Xf>vcNk`kHx4<&oOMdQ6*BI2gCggW@}u ze#_dO^lLCq1m^(JeUt8TKDmrXp(cCHL}nbXzT)NTZF+V8l_~h!AKCQB^m*QWGWm7P z=E5)7l%_c;iqW6i^f~%GmwnNuAubbiw@p{lRgC`3rk~g7OEzUR`m#+sHTsH8*J|{D zO-pDg*LcvT6&gKc(|a^}#HO<}dd#MCH2SJd=WFyeo7QRc=QdrW(UUe^qS0U2v{9q4 z+w@+I{?evx8vT_`mud9ZHto{rZ*00+qi@)>hw|L3zqRQajlOA9SzBMS=@&HmJDYxy zmI@Mu%43QdM?uwv@)+;nwY+Ji-NTQqO1*4@GLCxt6sD*q1dB8&c%m?*iXx>{ai(a} zQWa(OiWWF*G-y(wL{kE15JL%+*h=1j=PI-?RO(JH1Opb{)mj~YBpx-T%Wjx{P0R$Tv- zY2Hmm*(4e_IGM&}?Vj4CRj)%oBWq5wOj(7srmmt|_FC~*%Vxg;zpze^fOkwaFI%5b z`P`}r6W-y~5d4CMfP!8U-7yTTlA5F|Rgi*3dak+0Tr=0)Y>RHDVsph-p`Xc}Z|=f* zBAEwe3NjbhZ7pX;cW=n-HRsgCSf(_lZ!odG{$VVcqRSQ?q7$pa<}Je;)?wKg#zI`o zmL|q=;E#LjL2cUYh}w(O!5MBN7q~H`(t$afN(W|VBJIt@WZIu}iL^Jt4CKD2(t&B? zWwa$Q6;kPd)1#LG@3zwwUL44>O0%*~^2ZYj)hH^a?^wyS??cJ7?=EOP;1{*VqJ1Ks zcHee`H?wu6(v2EE3y!k+{$n7YHm4sjY>H;%Ih#j&H(AzI`v`kO{o={6e8zDiiVrDJ4e4#<Xk27iIE0$FrsM zNTINMV(;oxI$lM^ZTt6Tr=VXIP?%z_7>Tu+@o~O$tZt|gmn6g%AwI+p-KP&tYsCB+ z{;J41cTHn#)-(^U%QN)Wv_M8%%rbW67+XxnwYVW6HU-wSimc|cwPH8@!^ z@>g`7^Hy}udMi3-ycL}@?o!CuT?+kjUi^HEo6}1nmz(`SRjAniCYNxZ`*E8Y&Ldj0 zc05xmWlM2!sh~M0xYtw;6Bm~Wns#a`{9bz(F1&DkgciHW;xG`9#St2nBJ`qC#9CB} z;EGBSOHnC8Cn`mxM5PFfs1#ukl_KV$QUo|uia3T!5w1`vLK7-Qz(J*mE~pg21eGFo zpi;yNREpSuN^#d$DQ@;E#a&*dxV);;C@s}xtL70!fwkFU5T8NzBi&luxqG&?6b%h8mizb9iTZqugXhOL2g$T)L zLbx)92(5`Ggd1mw(7DlsaA6G*S{qFW_uUYo_0fcIT@Dc%jwXcLc8JhOG$CBpLxeU( z6T)3TL}*JiA%qG-gf5LHgh)e((B;vD5L^indS5gl#AZT--XBc}p`8$+9npjk843}~ zMiW9XCq!s0nh;_^Aws*O2_cjeB2IBxW#+)z~BMuzYpldJ-b~q%%08rIUj5UeFW@k-2U-3 zji8T)%P)#5&*vpiKCa|HM!y=?`(;t(`55NOCzSlJh0CvuD$l1oPd=sOe?44YMwRD7 zqbFahx}zaXtAuCI9ho`L$8y`Q+@$*DLwo3YT9W zRh|#zo_vFn|Lt)3;i&R_&iCXSmHZ9i@*`2@`TF3=H!1nw376j#Ri1Apo_w>C|3tX_ zmZCk1@|Q-H=R1@q->T$q3YWh;sytuKJoz>y|GRW^*pl|XsPcT{^W@u= z{3pZZ-yc<;FOr^or;`7@aQPik<@tW<$vaB^Q{nR2sPcU6_2j#h{4L?Hb}Xtq-=;nJ zZY6(fxcu&@@_b46c+*KU}^TRh~l%p8Rwr{|DiNGZ9su zBNd+f3?+YixaV9KRh|PNp8QND|C#XKUmsPT<0_u~EG7ThaQP2MmFIAcCqG-s;~VZ1 zJtuxE4tVb&s;V9w_ySc|-97j?iQA|;cK6^{No<%u@Bsax$^!h!#`*Xos}>xkTBqts zYPy5$1y0oibcf5hQ&xj=r>t?RnN#y5HQzyXPPJ1LAl)V7Al)SsPMk>zLy9|z0O=l? z1nC}`a*|9+8B)?o1xWYGT9EFQwo}U_+mL_)r2AwYNcYKlr;bVWhE(U&2T1qJ29WNT zjZOoT8V#wzX$+7K$R>~u$Y!UBNzI1T=1Ehy#r_;ftPDAQ&Is>Ffr32EVvdeLp)MZGH(-j~cmfav7mOV~4 zlX?uP+vy3A9+$l!Juas?y-b>BNWIRq0O<)i9i%7Z3}-r%W*E|RXGVZ@M9u{1h@9oj zWYR1{n(536kdDgPARU!yXEu}4hBVtr2S`uJIUqeH=Q?wkG}n;kICBG}r{z45o|b*i zJSO!S(mbaxKzc^@gY=9XaQc}vU`YKA{MvKhXXPMB&&v7EAd}`B(jX79M|w^!K=wJg z&{6YXp&>1B76wSi53O-tSMRS8UX;s0dQq-$mNRLEAuV@S1W3o_N|27rRnAH#tumyQ&MKEwbvJHx zvB_~;>ny!MxOc#+YI>Po!Rpc$`vJX*Sgu9s*z5Ef%3?GSJ5H|yRndj9$LL!?)wCh@ zApJd14UNY>O>Y3jsTjMN{sAaKH^s{IZJ;FG63f$ffKv28Y!m$>P%S+Y8>W8(vgvqi zfW8YtXr

a}X z9iV>$Y83_RQ}pjZZDPW@k^TdyU3}8IhW-<%L)>QVrvC!!6o;%4`fngd9Jbce{{VG~ zSFCyTzd+sM4QnR-5U9tBSr+{WsMku0H|fVf)2u%6GQ9~j-C8JKpq~KEur`PX>8C(5 zt*zqA^cK)8t0-^9%ymwdiuC%09q2ejdqJhprx_TQC2hoEsGtd^`aSQdF%+CD_Ve7 z#NMEpq7`Um?7JA7HlS6a9ijfEv@M=^lj`FnenRbWis4@Zuv5e2&!8HTig9p5EH7j8 zuHs*>ow#{pUJ4bTspegqC-2DuIMwdt#dLfXuf;nWyvj!d{v`*hPKpmTd>du>QpkF_ zarIeMYt#Xtr*ZWdmc2yd;2jiS@PKeWz~y(!DmFM(#*)CHz?klm)yjnPfU1;ms$J7P zvPPL|JX4Kpx>v@P2?qpIEAE=^lL=)?c&3DFx?d)h2`2_qE9sgJ$dodrJX6Xw9h9}o zgd>EhRqL7#Nn4q0&t$u%hh?2I;Y?v_)w!leWxX=hd!~BVbXYbh6Al@sR)cGLTsA6G zqi1S#O;5-sWx}b$)M|1~M`W`yHG8IJ*K}02C=-q$rdEq$lcbxlvpHf6%O z#MEkYP0z@7Woq|K?XKxr*`Z80sF+$EuIV}1sZ5=osnazbla4asu{y;ZpcK6(ej?@q)zXi}x5PXkTeOR#q7SG}EEac*exQ2%JmMxX0MsCM ziG5-as8M`GTqWiMHHq8BxncoOvv^R*p;lXrpSE;Bu-eiwvzMK=YZCOAR?*N%r|u7)+JK303@B zQ`=0%?x+gW8>Zy}d_Z3dXFe0@l7x8sMNJh#&rIfE0&NG5_VS>J9B&w0+!-MiG zR6oT(<#ko+s1b#2#2ccC`#nF63Z{w1$W8dIoL(K%P}Au&)UGDZ~g7pHyvnuyB+ZR@Qx%*H*k!PG9S_Cl>f{;eWxm>Gac`& zGyce&0U^^R+-=^;_~=11qjYApOvjuv(J_C-&X}C(Ue_7wp5MbWsc1Ucedapp_wx*k zny&Vo(XRTvJ@dMz!@Xy^!+xLN6=~D$Y41X}{hq&D>gYVyn5loRco08i5%`VjL2;7r{VRW?8WR_BPz6!9 ai;*TUQk(I4uh@zl{zskICbo;q$@xF%?SruZ diff --git a/server/target/classes/com/wuhansaga/server/entity/NewsCategory.class b/server/target/classes/com/wuhansaga/server/entity/NewsCategory.class index 00ee26b7c69261b8b3d1301077c7acb696445919..2062066a3cbd6a7fdec63b22c14c64f02ee1f53a 100644 GIT binary patch literal 7598 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 literal 7684 zcmdT}X>c4z6@IO~cV`cs*2u=>SQA;YBN7OZk?kZ_0qLKVOBEBt}~RPmeQ2;b}O*_oAO@9>8zs=Vsg?|tv< znb-YZzg_?F-_JcyM0@G?De4h4x=>%4xT{sM-KM={Pc)szn$wtYT(9b#nKS zj#6D2-j<*Optu+BX@L32Uca*6uVY%UXk}gH0Rk;P$tT9d;X(BLfEq z4l}_XvgyqR<=MoKIi)w0^=~n#z-zGn7QMTyf15!?*5})JwS!yz#d#~%Z8rN^29>B+ z`6)j3W6NHH`q;v6epDU<)?RN=Kd+O8_C|FkSUqLX06%VTbK~jgA6WVuy&qrXz;zcJ6H1HN11jTdG1bx%2icLi%ol-b3I_ zFWBxhqgi=}L4!1ur5L@>pj+rx*1g}LF&bydHt0$vEf{ozk{p9Bp-b7iWKda2RfDcj z(y~EUDQU%^w<@V_(A()9>~W_-lS*nDw2v+oB8YwK*IZ23oh)GSr@Un}j^RdLADkLYZQ9__fAmC2wV z(@$`Tt=YAfbNCeMceptCSr@8Oy4>`kJNTJF=ji8xwyfC8xVYT~+qiWfSAof(^>c+~KUV@hXGdW1XDU}%uak1G*og~s#zpHj zRkNE-r$MucXe3(>A%moqk7Ddah$_`i!K%xjX%6RC+FtZThUFe<#g$3(l^n^jvk@^f^gC*PVVMDm@qT zHho^wAL<^QtE1BM9nq#QNczLw>92`O&sR^Iz9{LB(7U?D{@SSYe51ALOOpO*clte1 z>G`5;)AvdGW8H&uT~vC$f7|r^lKy!2le0f6Jzwi>`TZj}_nj2g;f8SE%+4N95m5NO`Y05or9%?yLG8k8}!A<&|g z18C7Q%p8LZ4T2N`owD)(ow5pMom z_A;nXgL=)r5U6JL15~pH%zg$9Xi&d75CXZ@AV97)WDYWDNP`B=p%7@*+5*t3HEeES z(69z=F^5B-hGhcOutrRiK_ePunj=0aehxQ7Y<<%vN@~~rdqliO9<^{}2F1&?hDNT3 z%HllT1zn8B#N+e+OG6x1V&;D=`nS4=1dj7h zS{oCXuEnNtOOW8q<-NX8&yeu<8oRfKH*S}QHCZ0;>jhlbwIqq{&=pZ04wfeO#P`Y~ zu&p#%K?z8g#?Mk}_j&sIN!FjR;%qSE+LGqNpiC#NgfyWhNT;-!@J;hpQks%&6Do!B zTC`Hqgd(B6QoiYwm6oP-+l11gyed{knou>gSH?G;wzATcZJSU_lvmBlNfXM5_R9Gt z*D|EZXqyb*v})z033Ww#<$Y7bDo9hIZ9=udTH7{FMtVTSSZ`2FOw)bz4Qx;X$@5J} zJ(Lyu=zeTkj4nqqJOC+9`$U$$1u21(@i%%9QW8o0Dt#ML3di|bdI(aQeo7D1cOYfx zWhB((YN8f{Fh#|U~z7HucuEII^0i*&aMQntIUxy-&q!0p$fZ=ug z4dy+p7^H*`@G{k#bs%Zg4X24Xyn0@ z{}&Ee0y+A~re7`_vi~AF$R+a``XPozd`{t0!RLfhom9hVXlnSlYPzb11~l^!pF;xE z#lBV^)OADfZ;2agc<3jbr|I#{8_3R|aANdJd5`>xp2Wy~>T~$~ntqEJ|KG;*^dkL^ G%>MxK>ot7< diff --git a/server/target/classes/com/wuhansaga/server/entity/ProductCategory.class b/server/target/classes/com/wuhansaga/server/entity/ProductCategory.class index f7b392023ac58d5aaa22a086938f1d1a04196dd1..18f2692c7cdb054a2cf688b69cb4038e7b57f000 100644 GIT binary patch literal 9582 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 literal 9678 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 Do>l#c diff --git a/server/target/classes/com/wuhansaga/server/entity/SingleEquipment.class b/server/target/classes/com/wuhansaga/server/entity/SingleEquipment.class index 81f48732ec425a2b419bb4b07c0c805825afbfb9..9214ad436fe1e38974d01589c5311ddabe32598d 100644 GIT binary patch literal 20999 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 KZ{Qzi&i?}!{usId literal 21090 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 literal 20513 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 diff --git a/server/target/classes/com/wuhansaga/server/mapper/NewsCategoryMapper.class b/server/target/classes/com/wuhansaga/server/mapper/NewsCategoryMapper.class index bf5b04ab333ae24506ace341d1c6b96af7fa44b7..780730f2120b7641c6cf68d90a4d04f3299e4531 100644 GIT binary patch delta 220 zcmcb|c8_gBr;LDaYDq?ZNfr1PS z44gpB#K6VC4WxM(85kLOfS9+KfrEvSfscV7$YBS{02K=`FaU)F8H5l*!eAj0Od(MQ mF@!3JMsWr<24o+& zGB7akFfuSQZ~-xQF#`_+FHnS)5y)U*VPxQA;0KCBg#^Gtf($|kAz`qP2&RxIgBU^; kM58zZ8v`=~JJ5KD#Rj--2C9$%tCM7q0@7?iqof%a04DJiJpcdz diff --git a/server/target/classes/com/wuhansaga/server/mapper/NewsMapper.class b/server/target/classes/com/wuhansaga/server/mapper/NewsMapper.class index e808518dc266317a453e3f398a73ae37f36fa609..2108c7ca836add806506df4d204124bcfd37aa43 100644 GIT binary patch delta 446 zcmbQrJC%3BDM10>)RK(+lz_yd#N5=9)S}|adl>B}p8B$xkLemyy(lXK2Ll5GClGT1 zF*gwN05LBRGcoWn@B?WJRt81}0U#DE2C9WKIT1`Q1d|)V1-nJ{ z6x$%eAPTe+WCJTBgBSw?&{A;*351X&SV#&}NSZ;0fw3M{r!0dU12b5Nml+-|i13gH yyH<%A;YaM@0rI&5gCf-DoJ=5hfrAwkoZ?If?P4IeLxUEiNeSd82KLEiZ1Mn_Ss#u7 delta 446 zcmbVIOAf(M6g}@%Q9NzY`YTppVhIvkXrhUUNZQ7eOi)(Q4;SM=^jsUGP7 diff --git a/server/target/classes/com/wuhansaga/server/mapper/ProductCategoryMapper.class b/server/target/classes/com/wuhansaga/server/mapper/ProductCategoryMapper.class index fad989a8fb33fa7e48ce51be9d5191750af90113..fa83f4379cfb9b7642f061dc5a18e0dcf9ccd81c 100644 GIT binary patch delta 183 zcmcb>et~_1B%_#sZ)!et~_1B%>HpW(p&NfNyF^Mt({_Vo_plYDsEQ@nn6*gOmR5Ff#Bl@G~$m zu!H!F2*q4r#jK1V#Xv;@SQT-@6mc`ugH#DJ2tkb!XF@g#?l6c3P9~TWfO>=(L>QPE xM1j^bF^CazhB$)+T(KlrG0Y-UG=EEhod&f@3T(PGn3Q3V1=4Il=gBcJ002WuAb0=( diff --git a/server/target/classes/com/wuhansaga/server/mapper/SingleEquipmentMapper.class b/server/target/classes/com/wuhansaga/server/mapper/SingleEquipmentMapper.class index 8a43999c225b56a3a3a6034b36520ca6ad0e0407..d391a1100fee8976eb07d885bce03d1c7fc16ecc 100644 GIT binary patch delta 345 zcmaFJ`H*wMTnz!=)RK(+lz_yd#N5=9)S_ZW2Cn49lGOD4qDs#cMh5om)XMVwqLhiV zPj2pGG-0aeWMbf8U|`?`VlE(NV&G=r0n*}342%rCK+IPRl!r4pSr{4k83cgJ*g={Q zdI{(eWDo)x0@B0E$RNzX05nE~K@=!d4;2#wi;089P=q8HB++$BF-S8o!wdsC9^!Br qu)}#65w7I`S|f|BSPnz6B0{ws&{y(61xySI42nRS4Jf6=zyJVDVjSN9 delta 325 zcmaFJ`H*wM+=<7JPuw6bDBzn~l98VhkXV$Mn_7}uRJ^%|(Tu5{iGhQGlYxOjoQZ*v zfeVPaiy3$jOkM^)pd=>~P>g|rmw|zWk%6B6Wh4&h-$xR?iK4ba6v*UI8mET;%lEeAGE R9!x4QC<19VpqWYx3;^><7fS#D diff --git a/server/target/classes/com/wuhansaga/server/service/BannerService.class b/server/target/classes/com/wuhansaga/server/service/BannerService.class index 7eb3ebd5f79786e242e8778fc2434feffbe60f73..08654da1910df285699e4834e76a42f0544e8dcb 100644 GIT binary patch literal 2260 zcma)7Yje{^6g}%WaU%=zB2H7vDYPg2$DP&bGIf1FeS|a@gGTG8#5xu^sWCa~J zaFfZ%??|%DAiG{fuBv=u==cnu3yfJd?Z~cQ&kiGcuB3v$)Nwlq?sgicFV)l?9be-v zJKLa>d>M8&MxBy|dnl%`tn-|#P}9RwH*0U`K~h?_Y|H1`NH$j$NYYcBO|Cl)o{ovK zWy|N?c1^mk%vy^x(`Bb_wyLIUsc|%!^mi;z;6{8+>HwZNc}0P=HQ1_|m}5Y~8`9r# z8e67owppmlEaMfcX`6o6C7Wllk{>%f%ki|1`g?_h&Zyc4+;g|*p8h!;8Y)F6hFwWm zH16a;alwJ0+-8FdL;8S?84LLeTpgwy7E|%f`Y!LPs7GU=RRnIHV!gOKPC4TI%Pwz% zwk+9umS?f)4{h7=P2X~Cc4NBSa@sX#*LWg%ti-zjfSQ!(;cQwC=gK%2AsuHrb&~1)DNHx;oKO+d4YCo~ z#8!mcp%O}g#e((@vj;d|IKY*EkS-+OVd((*NSIp*y#9^bMgnCr6cf0>d*&klaV}ww zLND-hsMKO#sYSfNOQx&@(PFMg+ypQiA6Rkwdwfvv>CSUjiLMb)qq4WT(*5|AR cmh5+Cl&+~VP}%Nv0PsWb{1HDzvp)m>0WY2n%K!iX literal 2260 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 literal 6080 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 Fe*t>oe;@z= diff --git a/server/target/classes/com/wuhansaga/server/service/NewsCategoryService.class b/server/target/classes/com/wuhansaga/server/service/NewsCategoryService.class index 2931e8217cc52d3870e9c82c3a1fe1343865e484..59ec1f5e7c7518b631b2a70953e8f7e159c56669 100644 GIT binary patch literal 2508 zcmb7F+g95~6y0MC!a@Wvgpx}yX`IBDfC%Z`goKcix;2-^#7WciGPVa>!IoIk7|L_M zqWy|?t%jz3=m+$px_U+uj-1GAg$K);8J&Ih*|X2gzyJOH4}e=}rI5gohNOXEj4&+L zosN0fZE@STO^JrJ({XVrzdDGt3gE=ALEk1Di8a|~%aGP}X|_k~M1c}ClpYnz>Q5Jy%OFGtZ zU&9v$O8Bx*xvknWY6>E@Y}uAvVHnEhsw4#2JZP0<8U%5TNb%yDZV&$SPVENiVUM(&%o)3kfGIx^@flwr?JhIU8Qg-PpV=yZ7#bm z@!5{ned5nodU`pYSDff8#AsZp5ZPdjx-1YmVNtJ7Mp*hnlX|>C3#Zy#QhOvIz>t4) ze#EXKd3}#g$58u`zy%C34xl7A2RLrvU5Q8FfL?n?~0`N5+(0Ya5hZzlk9r`8kkS41G@yB1spF2JNBTQ4KIR2Bb<6j(r{}|uAy J8_qU?{{fgLSB(Gw literal 2508 zcmb7FYgZdp6x}xj29lvb+9G|}7D;Iyg`x3nD3wxMqv6qprdq9flU$N1$qZ}e2IRB9 zLVty>Wn=Y&KfoX5^4ysrOcukElC`++bN1P1pELjb``6z9?xLk3#;{bkJH|n`#VwaN zx#0?DUpU@i)`hVl4%{^^MbmZ;D|AGA8sZF-FZn(<+T3ayo3)psE*Vl*=m?Sxq7DAC?*n%VFlrwwJ0%f}(gXV>ub>R)|I(sgy*L4oLNad%t%NY!&OOy7~# zpKExJ;Z`Ktx^20VThcfJ=8ob6l2^Z!Rk$DN_!ys10B$&dNMA(HGFCL)9Vl)eiH>`U zhB%dAM_pUhao^)b+GYDdIBVP$2|U0<4WBVg9m}j_QR@(njz{>MqTT21uGrjRn9h{K z90u2l3i1~^zC@Yf96>I*A*oG=89I8Att#nk=-9*-!-#27H4vL`B#aV0^cBO9JG-E$ zP%4twcd2m&bvn}BYf!ILh^jiaJwy$vc1gu|K8)Tk4-fit9pB(vQoVoCSAE1~1#;Q6 zOu54F?kTcAy{l%c3|F3Xsl#|NuLu!KWVG$87^U4YTE&n+lE!;9i_w_O{SH0YHT*I4)kWBJtkJ$#r~8$A?z_*AXpud&ucDPV0qhG)Ogt05@bE_;06Acki# zi8)*&hx52eU28rBsnDmgfX8@3kSd-9HhIM9V_GvRg(Ga809!i1_A{miQ3Yt84xmXP zPIj_{CPxXoO?VbUDAIit=|L1TgD9TitAL>g0SZ0v_I2Pb=Ea`y*ju6;-3fWo`(AYN ze}euO_>QRio?t4){XnBi@k-z*k^2KYmwyFaQS7_%l{p@Ak?6Zfc!KXMbC_}vL&JM2 LutTGI+ywpu+n-In diff --git a/server/target/classes/com/wuhansaga/server/service/NewsService.class b/server/target/classes/com/wuhansaga/server/service/NewsService.class index b84ff8cb6d02a79478566f1d063447b3e4cf1dba..c61a0c92f15e81ce1bf39ff9eb8a8a59c50d59aa 100644 GIT binary patch literal 5337 zcmd5=`EwM<75-*-#Y(FYS_vDYU@*o8bh75~#bR^FNS3k^hd{O3;p* z_wMfb$A3Ql6M!f1_bNmXjU%R_0!tJ$X01YMtT?Qhj+WC>j&2{=da73+bNV>N zv4Vujw;pYDRJXY=Q+8uPF3Wu$Wx5)bsEQ+@q8h4#^^4m^X^x)Pvu?(4Tm|{Y%u(&Q zmda~pE|sy&TsrjLWx9G!x5HC?u5B!qsL5khbd7vUNK41DbRnDsU$D&7J}svo(4Au5 ztws`can!3=hPxCjl_&#N3Sy4&0!@Cn?r!QA-grR8gIK4a z*0b=w;$YrzhV>x@op)yDc@`8>HmGPsQ{czl<6RW6b)JBx@^Pe_uHlZ$IFb?6qM{XT z3YN{m?6K{b$2Jrmek?3fP)fx^*rcG|FtfH^AdY@RA8WUYCc|*qJUPOxTd*~bhgCd+ zM-{9o>(-Du3aX{wT)o{IqF3)~^vx$@+XtJ#MBtSaC@ZT!flfRfN0*9jVV2}f`g(Af8qCpxAj_!e5j54Vm9fTjyIpe_ z(-G`du@Czh%DU+kZC%u&c8#fS+2cYwQ)q!A6tZ@@iAefzFpfhi`tgi{x)~&X;h^D; zYx$zS_j!>vU14{WN{i5bK*eDkVUAP#E+>>VrBss+EbS0-x8OMyUle;(?g`>ZWXG3P zXc%O^8YW9FJ+>%aWUvjX&_SqG3?pF^kyrJzf=CufA%0keAxLXTS~6YNkXRWJ^&&58 ziUew^urNwW0-d2O8}YJ+*eV=}zc@NXp9qzTDvpcHNer=YySm6s(Q8hq7{?2QD7r_9 zb*YOyR6hGdU1atS)`G9%#W=nuipxt1HkJ+M1-C2M9!?Btr_ZhnB?xQ`FDqCZil2O5 z&uRHxcCIK2#hw#cebhB9vl6c|1^@ZhrGLLYee?BGw=PfLm^^dyqjNXkc`t#Jcum-T zPXeb!-FSVW790xV5&)4b-&FA}e4BxzA1i7i>1UfCVaXod9kzz{X`<1%x=pE7 zeMZidIxG0#{~{C?sY?wHHg2d=S2{u08o4t)<{otx2}Bh@IxKtFP{A-24BVOU`O!2N z4*mDy|BCk_RTZaF?^G5sL<;dW@PIcT6P!DCk}0al#!v7V#L^a?oj-K>*;ccAb8+hhFj|-G1MnA+mL?cE&qSUAyy^Eh9#@+Yg zr}!Ch{+zQa>Ajg>aORhssf&>f$N=05yvyIO_>15oN#DadUzI~-72|x3ugVnG#vrgp zB-SMo$0~`l*&_^a)&w|f0-QB?U*Z%9YN7#x_xb8c|9}iX#IJqngH*kOYsr!!8)DLu za{;WC0JeIx0f1xxAQ=Ei28K#XD6w+Jn1S;V;rs?o)K>U)2cN>))e_DW)<@=dV;}!82_$0a7oCo9WaR zI<*xmu`%R;Re{u1zEm=nx<&u!c;UU4 za)HfEnJq;BFjn)9_y8WIE{}2MafbW0kPUYP+U&qpB3C5xD3qiGO=Dh_fSnRxrJZm^ zYM%80pGVznsGQGU$1(|yL+Qqgh$%f>$X!Q5JT9WPmBUs!j48bVFR{9LW|hO3vMn}^ zEd$qZbQ@E7OT&2e;A~)+v%XBS1Y6e zSEFjh@||@3Z7k(~g2Tz%;-k%^7>6yqH2y%C zB5SGENGnvSZN7%@G`C!Z(%gC#V**mRZq|jw)&^p0=_9YM i*2?Y@DWzux^JSbr@zGKcd?MNXS^ob8fAweo2K*Np^qrLe literal 5341 zcmd5=`&Sg_8GdG2Tv!HKFfmf2HO31!-6Wb`K=DF^Kmji(5sht!WdbA14$jVsq)n5i zjizZ$)0!q~)AW|sG&ZeTMF?%v+cD?#@6g)*51yVr?>Do<0L#(iY0v2o?96=MJMZ_r z&-=XZ_YHsl_eXyOuoZucA)=usWsfAsazjQYYYZC6tmzy#9d)r%X0qEH%l2@H_c25@ zB#s)#jbz%$3?_H?A2n01hIocHUB>9B>CjteL3bl+T6yy19(do6}*4%*Im{{6@9 z`u^-U=qEaA44N8F)^yHb>$Ee2O`+%Z43{yT@KBHISYlKVF9%2LOmYuB@6DOccvJ0N z?e>}3T-qg`(jIFtW4Jkopg#D&0JWtscr)W#?zl=yQ?n4+Vh@<5&`_bH7>mkKi6t>q zX;@c~qj@>i@cKSt5F0dI5s-4y zAx_rnSeKvaq5C+NqDDt8>NG6cVr4A1S;JDFu>eq0M@L6(FSF8VWz6o}NWbaqH~Q1` zTh(c&jC8NzSn})-M%^JRtD&xN&ZWHP)HO37Px)ooKEM(W)s3nn&Rf}5Q%RchOG5Mc zPQb2M>} z(ob}m?vOpO$8d}h(={EgTArq)_T>6`88R7G+x;ndo=7ze|93pyQ)p7e+jZ=~Rtm@~ z%uq}vS<5x0>NV&RZmaF=7#OiK8v5=JtthyU+wm)Nl z#H?N5Xb@hZwl|K0IHKc=_>zV)QrQy-^nn^*O6u_8HZs<-A>0#|!ux2{~@0bLQ^nWcO(g)12?` z64gsOzK)l!Z|ZnO-qHC^phOYsDIKrkTio`n47Vg^;-2I| zxi0eb!kgUa0Cz1xc3Q{l_%5?R!ASH{+EugUqV_Q{{hp5Ri)lGc^CYzo$jqCv5&uAK z)=GtM>o|*Zv?TNy%Ys$ZD-r!r$G0V-67vK*DP_n_Z`85-d2ar3{*a*<5-fy2z*CZI z%9}sa@pCEKxHlxVET^zv=!l`D3>WaL7~a>gv7jJBr?5Oq?<_4H>H`g1!U|V3+`Yx+ z9q~Z*Yj%c^YSL+Q&`9ra26NI|cAZF>qpoFVO7I)j(m&q1^sl$4Z@qf*_T}lDlc#Te zc=pyi@5gZwmxNkM_zI51@VkXRIYNyf4?t9ZO~(YTOX82^j5IsdtUB^OLYit1m0*fZ zz=Lr6;HFVm8zpBNs(rt`1-#aD7V4N;9)3*Q<$)^cyK2HC6k`#;7$c~X?*iUc zi86VW?o-O&B9y6l9p${f%Q3NPsJn{A^$i;|Z3>A+Xe^$_(!T2A>f$LZ)9^}lbOI~o zXU%o2zeM{Y)blsab%13^@POXHyJpW9Hee&4=oLvk#&zZHaXg`{8?XtR6~+cUiO(R) zw;#r5@j2rCJS}zFdn1h;Y2rv_lx{!=;H%(Epve|~6z4-}R-qiAt0?En{ZOW`EegRJ zQCJr#94i#gI?ph`Ssvgl4{(-ar@|=+%8LR7JJsqfcq&+Zms-7_p%-&5kteb`s+gP$ zV6_6U*|QA*Bmw}506-!jDxsi63z6Z$X+;~OlzeXERdQ0MU`*lZ$UF+xDFjPBvj9OE zzMxVi;TCIr5RyC5<@x|m zBTIV21m0q4vzm|ARTq;KpM>+XNNB`jLflFcnpxr7Da#$y!%ha+f+Li_#rt9Gf{Ruj zTH1Ktcp9hB&Mmt`k>mA(GXXhgd~zN~Ki;922)(r_*%#4IjW2PRpWZ*>Y_TG7B}$hq z-Olvi!D9Z#dHe1iRPtAD?b-bP1n1~fir^_;MG(3l*iZeyyhh+PtuD5~?obx>0H{8{ z5+ZVF^POLzNTkEI%_97bPY}J#<=&IjOyQRibTxc}@@ZV`tNQRde*3XlGgp@aLs(%amNb_NZca^t%fVa&jb`{p+BTN&fR8AS9l~A>F z<)PU;)#CT`@CVvROO$^v3TIO25>`dsb$nb`e~p#ha1HMXym0@l3_+*}AXG44UVp7n dyG=x`$Z{=a{lxee!Jm|)KjSaFis@g0{{VQ=c&GpX diff --git a/server/target/classes/com/wuhansaga/server/service/ProductCategoryService.class b/server/target/classes/com/wuhansaga/server/service/ProductCategoryService.class index 527fbefc6ebf8e52dd8ffe74725021a9f82da820..b313ecbd80f6c0d47ab6be47f1ec778c1351622a 100644 GIT binary patch literal 3732 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 Spp`(k2^hjB_|$ju8SoEwFKXNX diff --git a/server/target/classes/com/wuhansaga/server/service/ProductLineService.class b/server/target/classes/com/wuhansaga/server/service/ProductLineService.class index 65e2b022bba5576537c62d60c45ea5f474320921..6469f8ca6e9255c5efef57291ca58d391c7d5962 100644 GIT binary patch literal 4591 zcmd5%>Tdo z*M9(_Vc6cqEE)Ml+bTCp?t)o2midHB z3cDNa#fy5QVc7Jt5bLJqJ&t1LK?jahhmX%v1Zlti+aUaGMr}B z?Lj|wr!k;m4+a%_JpiFAg_L8yPO6fVxnc%G7*69s4I>y;IC!@JFEkB%Qz2b3T#4s7 znHMJyY50zKkSEJ@pFtM;H5|a0!mg8M-E`*^h5|A|EQR^``P_=|J)z+d98~D@$y;o$ zR!wKkC@UPh7X~}{5}$`POd=N+aOW-M&(fubxv!T!K}hwhjpqN z=WaC3Mvb;Du^o-~7Km**ZW9HU$75+6(eOBqDjbQe!Z&#kIG*UvZbq6y(jAXUce@@6 z863ltX*{LjIG$EG92>op4TV9+aF>j#?i%Hg21j8}N0oCc5~HBuBu-I}lt|HuRCw=X zP(H6oT1}C`X?!=0GaAm~88&vijRFgbZ9}g%jmy_WS;crC$8b)=d0b#vqTLp@rN(Vh zeKi&}%;R|~*Q|5qu#IOXJPwaIU;6XnvsKhq$WHv#PtLwPL{JM28@Ejyk^ts~Sq6fHN&TqUIP79AVc`Nn=fh zjj7Pz*2(47>zuD3k8HswB8Ou1_&d+SKNe>oWAPecaFlqkT8WqaeV zKa!ev9Pzp7oHum0Y0I?T6M5e1L>715*t}`kd_E9)9#Esub;Cav4#%U5Wbd;?hqh6o zKV}pFY99$~=IsP*Hd-VE2W4n`GCp2RQ_hix{)>jYW|bFpTdz^!HiLIBo0Ynky29t* z3Srz|N?9I~Ze)^Py_Xzzo|X3(GA$v`RI98Z=eU2SW{lP;NKO+bWs<5=)e3iLhnNB> zoc5J7X> zYg%>Ycw)h_D|x3O?`qdXPHc|#ylcyQYDsMJdT5@%(q7i9ggNXV2{9*UHgYn^xYI&j zi_$9N9SpT+o!84k!ku21BD{9&%1Pe-oK^VS9ge!rvx7|Y{kjm}gn{{vI^D~bZ#d)x z=)RyX#rj4}Wd;_iR&CW<&tEX=hApoq zo6+Q#1J|>jLK7R@FKajPBc!>@shqqJHTX-~q zOEa^#@x+W^NO?IAkwD-OKNSz7kKY@kbhaPU9;PYUjPm)ik63)nV(`a&0&}y7UMV*QO!h%V*(!r%`}0JShaRt7?3N! z=Ze&Ytc-iCP{1GZ{v-bR0{(ahLw~@_v=-n?0YgJ=;6au2ZCv$w>766i^Vo|E5x#~( zoI`o$*;}|Q1VvkSw--!gOZza`ASLX# r_MkWAL~n!gEyD-`Ae*E?KOgmTu^*psNzDJmYXX1v{(l;>@)__ox;(Yn literal 4591 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 I{1b`)0Bi+iN&o-= literal 0 HcmV?d00001 diff --git a/server/target/classes/com/wuhansaga/server/storage/MinioUploadStorage.class b/server/target/classes/com/wuhansaga/server/storage/MinioUploadStorage.class new file mode 100644 index 0000000000000000000000000000000000000000..13a71187be92b7ba5514354467f3f297a8d22c55 GIT binary patch literal 7547 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 A1^@s6 literal 0 HcmV?d00001 diff --git a/server/target/classes/com/wuhansaga/server/storage/UploadStorage$StoredObject.class b/server/target/classes/com/wuhansaga/server/storage/UploadStorage$StoredObject.class new file mode 100644 index 0000000000000000000000000000000000000000..a0506d22584c97b541c0e566a024388426d6c808 GIT binary patch literal 1979 zcmbtVZBr9h6n-uwY`~?ENVKRGt*FVOuCKKkT3@i1Fo=#QA9Vb1N$!x~?(PDMAj8lP*|U4^Ip;Yq&pG+}@A?-2zo9;aKJ;72*~nu+VDz4$Pfx}geIRp5q^ z4&;h*pLg3@HW!nxNh4MB@$zfchy)IKezzAbMuCzYf%1He>uI;XbzC!GKiC+-s6a0C z-YEewXAVm?4r7c?8rqMPA3giK%ezwIBo3aAJ%6QEVv>-2{Hp#sp5W0qU=wY=;612ltqXI_W^I`a)o;vTNPv zGTLb&t4nM_lGn(*=c|QYXITZ$m^I61HNn_joJv(cH8)X)sq0~Iy`ugeL} zn#{Ci7-kPrvb@~sB#XXnhSFXXzy)(6vlD7&-fNlp9uctk8|JSlVAp+L1#tk1w6L?w z#ljx~XSWKrM*%GSDR6RcRdy<=7Orsh^l>ozQ8Md~ZzZ#wV#$3(X+dz0o~G8%{CY*r zJZ0JW4BK$813 zr3tp+Os(Um@7W(obT-p1U#JqhMt&Z5sD& z8V`S>F- literal 0 HcmV?d00001 diff --git a/server/target/classes/com/wuhansaga/server/storage/UploadStorage.class b/server/target/classes/com/wuhansaga/server/storage/UploadStorage.class new file mode 100644 index 0000000000000000000000000000000000000000..a4f5d5903e52852f21edb5d1e25674aa64827657 GIT binary patch literal 661 zcmbVKyG{c!5S%>{j)d@j_Y{EwmlOdS1QJq0kRs@v%W^rmoKLnd;oB(q06q$_mxz}{ zfhepUug5#PW52#VzW_MJZis+z7@3ip6hoak9c$&-j@c^bjny%$+dMUT(3|Z-R0yjN zdaPBdvsiWe4;*HWlpP0;rs1Y`%ti-6R?&pbg(qTU|gBx8cdA5#FxtF4ZhUHZIWXw0( z4<&1I&IrxsFKV+?;geK#r;0jl5o*08&a^MesiHq#J8A#j$^Ft%9?T4Eorz+-X9^o} zX$oQehwVq@^n}H0cD}=-zDycoi*Wo;J@Mx%%h;Z$+Bp{28sEE_ClKc3g8+d%cNOyp z5X!D1`32Mk)dDO^Xh@E*gk_=sBvhrQ5LRRbSe4_oDO$&d#InvNwguIvh_Hjbcj7|1 A=Kufz literal 0 HcmV?d00001 diff --git a/server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index bfd4da2c..c6e297ee 100644 --- a/server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -7,10 +7,12 @@ com\wuhansaga\server\mapper\SingleEquipmentMapper.class com\wuhansaga\server\mapper\ProductCategoryMapper.class com\wuhansaga\server\service\WorkshopService.class com\wuhansaga\server\controller\portal\PortalCaseController.class +com\wuhansaga\server\config\MinioProperties.class com\wuhansaga\server\service\CompanyInfoService.class com\wuhansaga\server\controller\admin\AdminBannerController.class com\wuhansaga\server\controller\admin\AdminCaseController.class com\wuhansaga\server\mapper\MediaLibraryMapper.class +com\wuhansaga\server\controller\portal\UploadServeController$1.class com\wuhansaga\server\common\PageQuery.class com\wuhansaga\server\entity\MediaLibrary.class com\wuhansaga\server\controller\portal\PortalWorkshopController.class @@ -23,11 +25,15 @@ com\wuhansaga\server\service\MediaLibraryService.class com\wuhansaga\server\mapper\CaseMediaMapper.class com\wuhansaga\server\config\OpenApiConfig.class com\wuhansaga\server\mapper\CompanyInfoMapper.class +com\wuhansaga\server\controller\portal\UploadServeController.class com\wuhansaga\server\entity\CaseMedia.class com\wuhansaga\server\controller\admin\AdminAuthController.class com\wuhansaga\server\entity\ProductMedia.class +com\wuhansaga\server\controller\portal\UploadServeController$2.class com\wuhansaga\server\mapper\SysUserMapper.class +com\wuhansaga\server\storage\UploadStorage$StoredObject.class com\wuhansaga\server\mapper\AboutMapper.class +com\wuhansaga\server\storage\LocalUploadStorage.class com\wuhansaga\server\controller\admin\AdminProductCategoryController.class com\wuhansaga\server\controller\portal\PortalProductController.class com\wuhansaga\server\common\GlobalExceptionHandler.class @@ -48,6 +54,7 @@ com\wuhansaga\server\controller\admin\AdminCompanyController.class com\wuhansaga\server\entity\SysUser.class com\wuhansaga\server\service\AboutService.class com\wuhansaga\server\mapper\CaseStudyMapper.class +com\wuhansaga\server\storage\UploadStorage.class com\wuhansaga\server\config\WebMvcConfig.class com\wuhansaga\server\entity\News.class com\wuhansaga\server\common\PageResult.class @@ -79,6 +86,7 @@ com\wuhansaga\server\controller\admin\AdminWorkshopController.class com\wuhansaga\server\mapper\CaseCategoryMapper.class com\wuhansaga\server\entity\Banner.class com\wuhansaga\server\entity\ProductCategory.class +com\wuhansaga\server\storage\MinioUploadStorage.class com\wuhansaga\server\entity\Contact.class com\wuhansaga\server\config\SaTokenConfig.class com\wuhansaga\server\entity\SparePart.class diff --git a/server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index db7fbce4..d75e8b1c 100644 --- a/server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -3,6 +3,7 @@ D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\common\PageQuery.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\common\PageResult.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\common\R.java +D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\config\MinioProperties.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\config\OpenApiConfig.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\config\PortalSiteProperties.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\config\PortalSiteResolver.java @@ -31,6 +32,7 @@ D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\controller\portal\PortalProductController.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\controller\portal\PortalTechnologyController.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\controller\portal\PortalWorkshopController.java +D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\controller\portal\UploadServeController.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\entity\About.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\entity\Banner.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\entity\CaseCategory.java @@ -83,4 +85,7 @@ D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\service\SingleEquipmentService.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\service\SparePartService.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\service\WorkshopService.java +D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\storage\LocalUploadStorage.java +D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\storage\MinioUploadStorage.java +D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\storage\UploadStorage.java D:\DeXun_workspace\projects\wuhan-saga-official-website\server\src\main\java\com\wuhansaga\server\WuhanSagaApplication.java