From 543f76ad1dbb7c774b5620aa42ed2d12d4b5710e Mon Sep 17 00:00:00 2001 From: zhaojun <873019219@qq.com> Date: Thu, 11 Aug 2022 21:04:45 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0=20readme.md=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/model/entity/StorageSource.java | 4 ++ .../request/SaveStorageSourceRequest.java | 3 + .../storage/StorageSourceAdminResult.java | 5 +- .../zfile/home/controller/SiteController.java | 57 +++++++++++++++---- .../home/model/dto/StorageSourceDTO.java | 3 + ..._source_add_field_compatibility_readme.sql | 1 + ..._source_add_field_compatibility_readme.sql | 1 + .../resources/mapper/StorageSourceMapper.xml | 3 +- 8 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/db/migration-mysql/V8__storage_source_add_field_compatibility_readme.sql create mode 100644 src/main/resources/db/migration-sqlite/V8__storage_source_add_field_compatibility_readme.sql diff --git a/src/main/java/im/zhaojun/zfile/admin/model/entity/StorageSource.java b/src/main/java/im/zhaojun/zfile/admin/model/entity/StorageSource.java index 0b06535..ef47a70 100644 --- a/src/main/java/im/zhaojun/zfile/admin/model/entity/StorageSource.java +++ b/src/main/java/im/zhaojun/zfile/admin/model/entity/StorageSource.java @@ -97,6 +97,10 @@ public class StorageSource implements Serializable { @TableField(value = "default_switch_to_img_mode") @ApiModelProperty(value = "是否默认开启图片模式", example = "true") private Boolean defaultSwitchToImgMode; + + @TableField(value = "compatibility_readme") + @ApiModelProperty(value = "兼容 readme 模式", example = "true", notes = "兼容模式, 目录文档读取 readme.md 文件") + private Boolean compatibilityReadme; public boolean allowOperator() { // 允许文件操作,且允许匿名操作或者当前登录用户是管理员 diff --git a/src/main/java/im/zhaojun/zfile/admin/model/request/SaveStorageSourceRequest.java b/src/main/java/im/zhaojun/zfile/admin/model/request/SaveStorageSourceRequest.java index 3b668d5..b207bc0 100644 --- a/src/main/java/im/zhaojun/zfile/admin/model/request/SaveStorageSourceRequest.java +++ b/src/main/java/im/zhaojun/zfile/admin/model/request/SaveStorageSourceRequest.java @@ -65,5 +65,8 @@ public class SaveStorageSourceRequest { @ApiModelProperty(value = "是否默认开启图片模式", example = "true") private boolean defaultSwitchToImgMode; + + @ApiModelProperty(value = "兼容 readme 模式", example = "true", notes = "兼容模式, 目录文档读取 readme.md 文件") + private boolean compatibilityReadme; } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/admin/model/result/storage/StorageSourceAdminResult.java b/src/main/java/im/zhaojun/zfile/admin/model/result/storage/StorageSourceAdminResult.java index 9b6ec39..eebd0a0 100644 --- a/src/main/java/im/zhaojun/zfile/admin/model/result/storage/StorageSourceAdminResult.java +++ b/src/main/java/im/zhaojun/zfile/admin/model/result/storage/StorageSourceAdminResult.java @@ -31,7 +31,6 @@ public class StorageSourceAdminResult { @ApiModelProperty(value = "是否允许匿名进行文件操作", example = "true", notes = "是否允许匿名进行文件上传,编辑,删除等操作.") private Boolean enableFileAnnoOperator; - @ApiModelProperty(value = "是否开启缓存", example = "true") private Boolean enableCache; @@ -78,5 +77,9 @@ public class StorageSourceAdminResult { @ApiModelProperty(value = "存储源刷新信息") private RefreshTokenCache.RefreshTokenInfo refreshTokenInfo; + + + @ApiModelProperty(value = "兼容 readme 模式", example = "true", notes = "兼容模式, 目录文档读取 readme.md 文件") + private Boolean compatibilityReadme; } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/home/controller/SiteController.java b/src/main/java/im/zhaojun/zfile/home/controller/SiteController.java index 89609e0..0f071e1 100644 --- a/src/main/java/im/zhaojun/zfile/home/controller/SiteController.java +++ b/src/main/java/im/zhaojun/zfile/home/controller/SiteController.java @@ -1,22 +1,29 @@ package im.zhaojun.zfile.home.controller; -import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.BooleanUtil; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSort; import im.zhaojun.zfile.admin.model.entity.ReadmeConfig; import im.zhaojun.zfile.admin.model.entity.StorageSource; import im.zhaojun.zfile.admin.model.enums.ReadmeDisplayModeEnum; +import im.zhaojun.zfile.admin.model.param.IStorageParam; import im.zhaojun.zfile.admin.service.ReadmeConfigService; import im.zhaojun.zfile.admin.service.StorageSourceService; import im.zhaojun.zfile.admin.service.SystemConfigService; import im.zhaojun.zfile.common.config.ZFileProperties; +import im.zhaojun.zfile.common.context.StorageSourceContext; import im.zhaojun.zfile.common.exception.InvalidStorageSourceException; +import im.zhaojun.zfile.common.exception.NotExistFileException; import im.zhaojun.zfile.common.util.AjaxJson; +import im.zhaojun.zfile.common.util.HttpUtil; +import im.zhaojun.zfile.common.util.StringUtils; import im.zhaojun.zfile.home.convert.StorageSourceConvert; import im.zhaojun.zfile.home.model.dto.SystemConfigDTO; import im.zhaojun.zfile.home.model.request.FileListConfigRequest; +import im.zhaojun.zfile.home.model.result.FileItemResult; import im.zhaojun.zfile.home.model.result.SiteConfigResult; import im.zhaojun.zfile.home.model.result.StorageSourceConfigResult; +import im.zhaojun.zfile.home.service.base.AbstractBaseFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -57,6 +64,9 @@ public class SiteController { @Resource private ReadmeConfigService readmeConfigService; + + @Resource + private StorageSourceContext storageSourceContext; @ApiOperationSupport(order = 1) @@ -93,18 +103,41 @@ public class SiteController { // 根据存储源 key 获取存储源 id Integer storageId = storageSource.getId(); - - // 获取指定目录 readme 文件 - ReadmeConfig readmeByPath = readmeConfigService.findReadmeByPath(storageId, path); - - if (ObjectUtil.isNotNull(readmeByPath)) { - String readmeText = readmeByPath.getReadmeText(); - ReadmeDisplayModeEnum displayMode = readmeByPath.getDisplayMode(); - - storageSourceConfigResult.setReadmeText(readmeText); - storageSourceConfigResult.setReadmeDisplayMode(displayMode); + + + ReadmeConfig readmeByPath = new ReadmeConfig(); + readmeByPath.setStorageId(storageId); + readmeByPath.setDisplayMode(ReadmeDisplayModeEnum.BOTTOM); + if (BooleanUtil.isTrue(storageSource.getCompatibilityReadme())) { + try { + log.info("存储源 {} 兼容获取目录 {} 下的 readme.md", storageSource.getName(), path); + AbstractBaseFileService abstractBaseFileService = storageSourceContext.get(storageId); + String pathAndName = StringUtils.concat(path, "readme.md"); + FileItemResult fileItem = abstractBaseFileService.getFileItem(pathAndName); + if (fileItem != null) { + String url = fileItem.getUrl(); + String readmeText = HttpUtil.getTextContent(url); + readmeByPath.setReadmeText(readmeText); + } + } catch (Exception e) { + if (e instanceof NotExistFileException) { + log.error("存储源 {} 兼容获取目录 {} 下的 readme.md 文件失败", storageSource.getName(), path); + } else { + log.error("存储源 {} 兼容获取目录 {} 下的 readme.md 文件失败", storageSource.getName(), path, e); + } + } + } else { + // 获取指定目录 readme 文件 + ReadmeConfig dbReadmeConfig = readmeConfigService.findReadmeByPath(storageId, path); + if (dbReadmeConfig != null) { + readmeByPath = dbReadmeConfig; + } + log.info("存储源 {} 规则模式获取目录 {} 下文档信息", storageSource.getName(), path); } - + + storageSourceConfigResult.setReadmeDisplayMode(readmeByPath.getDisplayMode()); + storageSourceConfigResult.setReadmeText(readmeByPath.getReadmeText()); + return AjaxJson.getSuccessData(storageSourceConfigResult); } diff --git a/src/main/java/im/zhaojun/zfile/home/model/dto/StorageSourceDTO.java b/src/main/java/im/zhaojun/zfile/home/model/dto/StorageSourceDTO.java index 7bb9816..f5af590 100644 --- a/src/main/java/im/zhaojun/zfile/home/model/dto/StorageSourceDTO.java +++ b/src/main/java/im/zhaojun/zfile/home/model/dto/StorageSourceDTO.java @@ -62,5 +62,8 @@ public class StorageSourceDTO { @ApiModelProperty(value = "是否默认开启图片模式", example = "true") private boolean defaultSwitchToImgMode; + + @ApiModelProperty(value = "兼容 readme 模式", example = "true", notes = "兼容模式, 目录文档读取 readme.md 文件") + private Boolean compatibilityReadme; } \ No newline at end of file diff --git a/src/main/resources/db/migration-mysql/V8__storage_source_add_field_compatibility_readme.sql b/src/main/resources/db/migration-mysql/V8__storage_source_add_field_compatibility_readme.sql new file mode 100644 index 0000000..4048fe5 --- /dev/null +++ b/src/main/resources/db/migration-mysql/V8__storage_source_add_field_compatibility_readme.sql @@ -0,0 +1 @@ +alter table storage_source add compatibility_readme bit; \ No newline at end of file diff --git a/src/main/resources/db/migration-sqlite/V8__storage_source_add_field_compatibility_readme.sql b/src/main/resources/db/migration-sqlite/V8__storage_source_add_field_compatibility_readme.sql new file mode 100644 index 0000000..4048fe5 --- /dev/null +++ b/src/main/resources/db/migration-sqlite/V8__storage_source_add_field_compatibility_readme.sql @@ -0,0 +1 @@ +alter table storage_source add compatibility_readme bit; \ No newline at end of file diff --git a/src/main/resources/mapper/StorageSourceMapper.xml b/src/main/resources/mapper/StorageSourceMapper.xml index 4a3813c..4662b61 100644 --- a/src/main/resources/mapper/StorageSourceMapper.xml +++ b/src/main/resources/mapper/StorageSourceMapper.xml @@ -19,12 +19,13 @@ + `id`, `enable`, `enable_cache`, `name`, `auto_refresh_cache`, `type`, `search_enable`, `search_ignore_case`, `order_num`, `default_switch_to_img_mode`, - `remark`, `key`, `enable_file_operator`, `search_mode`, `enable_file_anno_operator` + `remark`, `key`, `enable_file_operator`, `search_mode`, `enable_file_anno_operator`, `compatibility_readme`