Ver Fonte

集成Mongo

wukai há 2 anos atrás
pai
commit
29b5d595b7
30 ficheiros alterados com 871 adições e 190 exclusões
  1. 0 13
      doc-admin/pom.xml
  2. 8 36
      doc-admin/src/main/resources/application-dev.yml
  3. 40 2
      doc-admin/src/main/resources/application.yml
  4. 4 0
      doc-biz/pom.xml
  5. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocActorController.java
  6. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocDirController.java
  7. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocDirUserController.java
  8. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocFavoriteController.java
  9. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocFavoriteLabelController.java
  10. 59 31
      doc-biz/src/main/java/com/doc/biz/controller/DocInfoController.java
  11. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocMsgController.java
  12. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocRecentController.java
  13. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocShareController.java
  14. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocSpaceController.java
  15. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocSpaceExpansionController.java
  16. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocTransferController.java
  17. 6 6
      doc-biz/src/main/java/com/doc/biz/controller/DocVersionController.java
  18. 100 0
      doc-biz/src/main/java/com/doc/biz/controller/FileUploadController.java
  19. 73 0
      doc-biz/src/main/java/com/doc/biz/domain/DocumentFile.java
  20. 14 0
      doc-biz/src/main/java/com/doc/biz/mapper/MongoFileRepository.java
  21. 45 0
      doc-biz/src/main/java/com/doc/biz/service/IMongoService.java
  22. 271 0
      doc-biz/src/main/java/com/doc/biz/service/impl/MongoServiceImpl.java
  23. 40 0
      doc-biz/src/main/java/com/doc/biz/vo/DocumentVO.java
  24. 20 3
      doc-common/pom.xml
  25. 36 0
      doc-common/src/main/java/com/doc/common/config/MongoConfig.java
  26. 11 7
      doc-common/src/main/java/com/doc/common/constant/Constants.java
  27. 38 25
      doc-common/src/main/java/com/doc/common/utils/sign/Md5Utils.java
  28. 5 1
      doc-framework/pom.xml
  29. 2 0
      doc-framework/src/main/java/com/doc/framework/config/SecurityConfig.java
  30. 33 0
      doc-framework/src/main/java/com/doc/framework/interceptor/ExceptionInterceptor.java

+ 0 - 13
doc-admin/pom.xml

@@ -24,19 +24,6 @@
             <optional>true</optional> <!-- 表示依赖不会传递 -->
         </dependency>
 
-        <!-- swagger3-->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-boot-starter</artifactId>
-        </dependency>
-
-        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-models</artifactId>
-            <version>1.6.2</version>
-        </dependency>
-
         <!-- Mysql驱动包 -->
         <dependency>
             <groupId>mysql</groupId>

+ 8 - 36
doc-admin/src/main/resources/application-dev.yml

@@ -2,39 +2,19 @@
 server:
   # 服务器的HTTP端口,默认为8080
   port: 8080
-  servlet:
-    # 应用的访问路径
-    context-path: /
-  tomcat:
-    # tomcat的URI编码
-    uri-encoding: UTF-8
-    # 连接数满后的排队数,默认为100
-    accept-count: 1000
-    threads:
-      # tomcat最大线程数,默认为200
-      max: 800
-      # Tomcat启动初始化的线程数,默认值10
-      min-spare: 100
 # 项目相关配置
 ruoyi:
-  # 名称
-  name: RuoYi
-  # 版本
-  version: 3.8.6
-  # 版权年份
-  copyrightYear: 2023
-  # 实例演示开关
-  demoEnabled: false
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
   profile: D:/ruoyi/uploadPath
-  # 获取ip地址开关
-  addressEnabled: false
-  # 验证码类型 math 数字计算 char 字符验证
-  captchaType: math
-
-
 # Spring配置
 spring:
+  #mongodb配置
+  data:
+    mongodb:
+      host: 192.168.188.88
+      port: 27017
+      database: document
+
   # redis 配置
   redis:
     # 地址
@@ -122,12 +102,4 @@ spring:
 logging:
   level:
     com.doc: debug
-    org.springframework: warn
-
-# 用户配置
-user:
-  password:
-    # 密码最大错误次数
-    maxRetryCount: 5
-    # 密码锁定时间(默认10分钟)
-    lockTime: 10
+    org.springframework: warn

+ 40 - 2
doc-admin/src/main/resources/application.yml

@@ -1,3 +1,34 @@
+# 项目相关配置
+ruoyi:
+  # 名称
+  name: RuoYi
+  # 版本
+  version: 3.8.6
+  # 版权年份
+  copyrightYear: 2023
+  # 实例演示开关
+  demoEnabled: false
+  # 获取ip地址开关
+  addressEnabled: false
+  # 验证码类型 math 数字计算 char 字符验证
+  captchaType: math
+# 公共配置
+server:
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    # tomcat超时时间
+    max-connections: 30000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
 # Spring配置
 spring:
   # 资源信息
@@ -10,9 +41,9 @@ spring:
   servlet:
     multipart:
       # 单个文件大小
-      max-file-size: 10MB
+      max-file-size: 10GB
       # 设置总上传的文件大小
-      max-request-size: 20MB
+      max-request-size: 20GB
   # 服务模块
   devtools:
     restart:
@@ -58,3 +89,10 @@ xss:
   excludes: /system/notice
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*
+# 用户配置
+user:
+  password:
+    # 密码最大错误次数
+    maxRetryCount: 5
+    # 密码锁定时间(默认10分钟)
+    lockTime: 10

+ 4 - 0
doc-biz/pom.xml

@@ -22,6 +22,10 @@
             <groupId>com.jjt</groupId>
             <artifactId>jjt-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocActorController.java

@@ -41,7 +41,7 @@ public class DocActorController extends BaseController {
      * 查询文档协作列表
      */
     @ApiOperation("查询文档协作列表")
-    @PreAuthorize("@ss.hasPermi('biz:actor:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:actor:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocActor docActor) {
         startPage();
@@ -53,7 +53,7 @@ public class DocActorController extends BaseController {
      * 导出文档协作列表
      */
     @ApiOperation("导出文档协作列表")
-    @PreAuthorize("@ss.hasPermi('biz:actor:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:actor:export')")
     @Log(title = "文档协作" , businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocActor docActor) {
@@ -66,7 +66,7 @@ public class DocActorController extends BaseController {
      * 获取文档协作详细信息
      */
     @ApiOperation("获取文档协作详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:actor:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:actor:query')")
     @GetMapping(value = "/{autoId}")
     public AjaxResult getInfo(@PathVariable("autoId") Long autoId) {
         return success(docActorService.selectDocActorByAutoId(autoId));
@@ -76,7 +76,7 @@ public class DocActorController extends BaseController {
      * 新增文档协作
      */
     @ApiOperation("新增文档协作")
-    @PreAuthorize("@ss.hasPermi('biz:actor:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:actor:add')")
     @Log(title = "文档协作" , businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocActor docActor) {
@@ -87,7 +87,7 @@ public class DocActorController extends BaseController {
      * 修改文档协作
      */
     @ApiOperation("修改文档协作")
-    @PreAuthorize("@ss.hasPermi('biz:actor:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:actor:edit')")
     @Log(title = "文档协作" , businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocActor docActor) {
@@ -98,7 +98,7 @@ public class DocActorController extends BaseController {
      * 删除文档协作
      */
     @ApiOperation("删除文档协作")
-    @PreAuthorize("@ss.hasPermi('biz:actor:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:actor:remove')")
     @Log(title = "文档协作" , businessType = BusinessType.DELETE)
     @DeleteMapping("/{autoIds}")
     public AjaxResult remove(@PathVariable Long[] autoIds) {

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocDirController.java

@@ -41,7 +41,7 @@ public class DocDirController extends BaseController
      * 查询文档目录管理列表
      */
     @ApiOperation("查询文档目录管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:dir:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:dir:list')")
     @GetMapping("/list")
     public AjaxResult list(DocDir docDir)
     {
@@ -53,7 +53,7 @@ public class DocDirController extends BaseController
      * 导出文档目录管理列表
      */
     @ApiOperation("导出文档目录管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:dir:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:dir:export')")
     @Log(title = "文档目录管理", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocDir docDir)
@@ -67,7 +67,7 @@ public class DocDirController extends BaseController
      * 获取文档目录管理详细信息
      */
     @ApiOperation("获取文档目录管理详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:dir:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:dir:query')")
     @GetMapping(value = "/{dirId}")
     public AjaxResult getInfo(@PathVariable("dirId") Long dirId)
     {
@@ -78,7 +78,7 @@ public class DocDirController extends BaseController
      * 新增文档目录管理
      */
     @ApiOperation("新增文档目录管理")
-    @PreAuthorize("@ss.hasPermi('biz:dir:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:dir:add')")
     @Log(title = "文档目录管理", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocDir docDir)
@@ -90,7 +90,7 @@ public class DocDirController extends BaseController
      * 修改文档目录管理
      */
     @ApiOperation("修改文档目录管理")
-    @PreAuthorize("@ss.hasPermi('biz:dir:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:dir:edit')")
     @Log(title = "文档目录管理", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocDir docDir)
@@ -102,7 +102,7 @@ public class DocDirController extends BaseController
      * 删除文档目录管理
      */
     @ApiOperation("删除文档目录管理")
-    @PreAuthorize("@ss.hasPermi('biz:dir:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:dir:remove')")
     @Log(title = "文档目录管理", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{dirIds}")
     public AjaxResult remove(@PathVariable Long[] dirIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocDirUserController.java

@@ -42,7 +42,7 @@ public class DocDirUserController extends BaseController
      * 查询组织目录成员列表
      */
     @ApiOperation("查询组织目录成员列表")
-    @PreAuthorize("@ss.hasPermi('biz:user:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:user:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocDirUser docDirUser)
     {
@@ -55,7 +55,7 @@ public class DocDirUserController extends BaseController
      * 导出组织目录成员列表
      */
     @ApiOperation("导出组织目录成员列表")
-    @PreAuthorize("@ss.hasPermi('biz:user:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:user:export')")
     @Log(title = "组织目录成员", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocDirUser docDirUser)
@@ -69,7 +69,7 @@ public class DocDirUserController extends BaseController
      * 获取组织目录成员详细信息
      */
     @ApiOperation("获取组织目录成员详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:user:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:user:query')")
     @GetMapping(value = "/{autoId}")
     public AjaxResult getInfo(@PathVariable("autoId") Long autoId)
     {
@@ -80,7 +80,7 @@ public class DocDirUserController extends BaseController
      * 新增组织目录成员
      */
     @ApiOperation("新增组织目录成员")
-    @PreAuthorize("@ss.hasPermi('biz:user:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:user:add')")
     @Log(title = "组织目录成员", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocDirUser docDirUser)
@@ -92,7 +92,7 @@ public class DocDirUserController extends BaseController
      * 修改组织目录成员
      */
     @ApiOperation("修改组织目录成员")
-    @PreAuthorize("@ss.hasPermi('biz:user:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:user:edit')")
     @Log(title = "组织目录成员", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocDirUser docDirUser)
@@ -104,7 +104,7 @@ public class DocDirUserController extends BaseController
      * 删除组织目录成员
      */
     @ApiOperation("删除组织目录成员")
-    @PreAuthorize("@ss.hasPermi('biz:user:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:user:remove')")
     @Log(title = "组织目录成员", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{autoIds}")
     public AjaxResult remove(@PathVariable Long[] autoIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocFavoriteController.java

@@ -42,7 +42,7 @@ public class DocFavoriteController extends BaseController
      * 查询文件收藏列表
      */
     @ApiOperation("查询文件收藏列表")
-    @PreAuthorize("@ss.hasPermi('biz:favorite:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:favorite:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocFavorite docFavorite)
     {
@@ -55,7 +55,7 @@ public class DocFavoriteController extends BaseController
      * 导出文件收藏列表
      */
     @ApiOperation("导出文件收藏列表")
-    @PreAuthorize("@ss.hasPermi('biz:favorite:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:favorite:export')")
     @Log(title = "文件收藏", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocFavorite docFavorite)
@@ -69,7 +69,7 @@ public class DocFavoriteController extends BaseController
      * 获取文件收藏详细信息
      */
     @ApiOperation("获取文件收藏详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:favorite:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:favorite:query')")
     @GetMapping(value = "/{favoriteId}")
     public AjaxResult getInfo(@PathVariable("favoriteId") Long favoriteId)
     {
@@ -80,7 +80,7 @@ public class DocFavoriteController extends BaseController
      * 新增文件收藏
      */
     @ApiOperation("新增文件收藏")
-    @PreAuthorize("@ss.hasPermi('biz:favorite:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:favorite:add')")
     @Log(title = "文件收藏", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocFavorite docFavorite)
@@ -92,7 +92,7 @@ public class DocFavoriteController extends BaseController
      * 修改文件收藏
      */
     @ApiOperation("修改文件收藏")
-    @PreAuthorize("@ss.hasPermi('biz:favorite:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:favorite:edit')")
     @Log(title = "文件收藏", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocFavorite docFavorite)
@@ -104,7 +104,7 @@ public class DocFavoriteController extends BaseController
      * 删除文件收藏
      */
     @ApiOperation("删除文件收藏")
-    @PreAuthorize("@ss.hasPermi('biz:favorite:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:favorite:remove')")
     @Log(title = "文件收藏", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{favoriteIds}")
     public AjaxResult remove(@PathVariable Long[] favoriteIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocFavoriteLabelController.java

@@ -42,7 +42,7 @@ public class DocFavoriteLabelController extends BaseController
      * 查询文件收藏标签列表
      */
     @ApiOperation("查询文件收藏标签列表")
-    @PreAuthorize("@ss.hasPermi('biz:label:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:label:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocFavoriteLabel docFavoriteLabel)
     {
@@ -55,7 +55,7 @@ public class DocFavoriteLabelController extends BaseController
      * 导出文件收藏标签列表
      */
     @ApiOperation("导出文件收藏标签列表")
-    @PreAuthorize("@ss.hasPermi('biz:label:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:label:export')")
     @Log(title = "文件收藏标签", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocFavoriteLabel docFavoriteLabel)
@@ -69,7 +69,7 @@ public class DocFavoriteLabelController extends BaseController
      * 获取文件收藏标签详细信息
      */
     @ApiOperation("获取文件收藏标签详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:label:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:label:query')")
     @GetMapping(value = "/{labelId}")
     public AjaxResult getInfo(@PathVariable("labelId") Long labelId)
     {
@@ -80,7 +80,7 @@ public class DocFavoriteLabelController extends BaseController
      * 新增文件收藏标签
      */
     @ApiOperation("新增文件收藏标签")
-    @PreAuthorize("@ss.hasPermi('biz:label:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:label:add')")
     @Log(title = "文件收藏标签", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocFavoriteLabel docFavoriteLabel)
@@ -92,7 +92,7 @@ public class DocFavoriteLabelController extends BaseController
      * 修改文件收藏标签
      */
     @ApiOperation("修改文件收藏标签")
-    @PreAuthorize("@ss.hasPermi('biz:label:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:label:edit')")
     @Log(title = "文件收藏标签", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocFavoriteLabel docFavoriteLabel)
@@ -104,7 +104,7 @@ public class DocFavoriteLabelController extends BaseController
      * 删除文件收藏标签
      */
     @ApiOperation("删除文件收藏标签")
-    @PreAuthorize("@ss.hasPermi('biz:label:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:label:remove')")
     @Log(title = "文件收藏标签", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{labelIds}")
     public AjaxResult remove(@PathVariable Long[] labelIds)

+ 59 - 31
doc-biz/src/main/java/com/doc/biz/controller/DocInfoController.java

@@ -4,17 +4,14 @@ import java.util.List;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
+import com.doc.biz.domain.DocumentFile;
+import com.doc.biz.service.IMongoService;
+import com.doc.biz.vo.DocumentVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.doc.common.annotation.Log;
 import com.doc.common.core.controller.BaseController;
 import com.doc.common.core.domain.AjaxResult;
@@ -23,29 +20,65 @@ import com.doc.biz.domain.DocInfo;
 import com.doc.biz.service.IDocInfoService;
 import com.doc.common.utils.poi.ExcelUtil;
 import com.doc.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 文件基本信息表Controller
- * 
+ *
  * @author wukai
  * @date 2023-08-15
  */
-@Api(tags="文件基本信息表")
+@Api(tags = "文件基本信息表")
 @RestController
 @RequestMapping("/biz/info")
-public class DocInfoController extends BaseController
-{
+@Slf4j
+public class DocInfoController extends BaseController {
     @Resource
     private IDocInfoService docInfoService;
+    @Resource
+    private IMongoService mongoService;
+
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     */
+    @ApiOperation("上传文件")
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(@RequestParam(value = "file") MultipartFile file) {
+        try {
+            DocumentVO vo = mongoService.uploadFile(file);
+            vo.getFileId();
+            return success();
+        } catch (Exception e) {
+            log.error("文件上传失败:", e);
+            return error(e.getMessage());
+        }
+    }
+
+    /**
+     * 多文件上传
+     *
+     * @param files
+     * @return
+     */
+    @PostMapping("/uploadFiles")
+    public AjaxResult uploadFile(@RequestParam(value = "files") List<MultipartFile> files) {
+        try {
+            return success(mongoService.uploadFiles(files));
+        } catch (Exception e) {
+            return error(e.getMessage());
+        }
+    }
 
     /**
      * 查询文件基本信息表列表
      */
     @ApiOperation("查询文件基本信息表列表")
-    @PreAuthorize("@ss.hasPermi('biz:info:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:info:list')")
     @GetMapping("/list")
-    public TableDataInfo list(DocInfo docInfo)
-    {
+    public TableDataInfo list(DocInfo docInfo) {
         startPage();
         List<DocInfo> list = docInfoService.selectDocInfoList(docInfo);
         return getDataTable(list);
@@ -55,11 +88,10 @@ public class DocInfoController extends BaseController
      * 导出文件基本信息表列表
      */
     @ApiOperation("导出文件基本信息表列表")
-    @PreAuthorize("@ss.hasPermi('biz:info:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:info:export')")
     @Log(title = "文件基本信息表", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, DocInfo docInfo)
-    {
+    public void export(HttpServletResponse response, DocInfo docInfo) {
         List<DocInfo> list = docInfoService.selectDocInfoList(docInfo);
         ExcelUtil<DocInfo> util = new ExcelUtil<DocInfo>(DocInfo.class);
         util.exportExcel(response, list, "文件基本信息表数据");
@@ -69,10 +101,9 @@ public class DocInfoController extends BaseController
      * 获取文件基本信息表详细信息
      */
     @ApiOperation("获取文件基本信息表详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:info:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:info:query')")
     @GetMapping(value = "/{docId}")
-    public AjaxResult getInfo(@PathVariable("docId") Long docId)
-    {
+    public AjaxResult getInfo(@PathVariable("docId") Long docId) {
         return success(docInfoService.selectDocInfoByDocId(docId));
     }
 
@@ -80,11 +111,10 @@ public class DocInfoController extends BaseController
      * 新增文件基本信息表
      */
     @ApiOperation("新增文件基本信息表")
-    @PreAuthorize("@ss.hasPermi('biz:info:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:info:add')")
     @Log(title = "文件基本信息表", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody DocInfo docInfo)
-    {
+    public AjaxResult add(@RequestBody DocInfo docInfo) {
         return toAjax(docInfoService.insertDocInfo(docInfo));
     }
 
@@ -92,11 +122,10 @@ public class DocInfoController extends BaseController
      * 修改文件基本信息表
      */
     @ApiOperation("修改文件基本信息表")
-    @PreAuthorize("@ss.hasPermi('biz:info:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:info:edit')")
     @Log(title = "文件基本信息表", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody DocInfo docInfo)
-    {
+    public AjaxResult edit(@RequestBody DocInfo docInfo) {
         return toAjax(docInfoService.updateDocInfo(docInfo));
     }
 
@@ -104,11 +133,10 @@ public class DocInfoController extends BaseController
      * 删除文件基本信息表
      */
     @ApiOperation("删除文件基本信息表")
-    @PreAuthorize("@ss.hasPermi('biz:info:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:info:remove')")
     @Log(title = "文件基本信息表", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{docIds}")
-    public AjaxResult remove(@PathVariable Long[] docIds)
-    {
+    @DeleteMapping("/{docIds}")
+    public AjaxResult remove(@PathVariable Long[] docIds) {
         return toAjax(docInfoService.deleteDocInfoByDocIds(docIds));
     }
 }

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocMsgController.java

@@ -42,7 +42,7 @@ public class DocMsgController extends BaseController
      * 查询消息管理列表
      */
     @ApiOperation("查询消息管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:msg:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:msg:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocMsg docMsg)
     {
@@ -55,7 +55,7 @@ public class DocMsgController extends BaseController
      * 导出消息管理列表
      */
     @ApiOperation("导出消息管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:msg:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:msg:export')")
     @Log(title = "消息管理", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocMsg docMsg)
@@ -69,7 +69,7 @@ public class DocMsgController extends BaseController
      * 获取消息管理详细信息
      */
     @ApiOperation("获取消息管理详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:msg:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:msg:query')")
     @GetMapping(value = "/{msgId}")
     public AjaxResult getInfo(@PathVariable("msgId") Long msgId)
     {
@@ -80,7 +80,7 @@ public class DocMsgController extends BaseController
      * 新增消息管理
      */
     @ApiOperation("新增消息管理")
-    @PreAuthorize("@ss.hasPermi('biz:msg:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:msg:add')")
     @Log(title = "消息管理", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocMsg docMsg)
@@ -92,7 +92,7 @@ public class DocMsgController extends BaseController
      * 修改消息管理
      */
     @ApiOperation("修改消息管理")
-    @PreAuthorize("@ss.hasPermi('biz:msg:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:msg:edit')")
     @Log(title = "消息管理", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocMsg docMsg)
@@ -104,7 +104,7 @@ public class DocMsgController extends BaseController
      * 删除消息管理
      */
     @ApiOperation("删除消息管理")
-    @PreAuthorize("@ss.hasPermi('biz:msg:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:msg:remove')")
     @Log(title = "消息管理", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{msgIds}")
     public AjaxResult remove(@PathVariable Long[] msgIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocRecentController.java

@@ -42,7 +42,7 @@ public class DocRecentController extends BaseController
      * 查询最近文件列表
      */
     @ApiOperation("查询最近文件列表")
-    @PreAuthorize("@ss.hasPermi('biz:recent:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:recent:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocRecent docRecent)
     {
@@ -55,7 +55,7 @@ public class DocRecentController extends BaseController
      * 导出最近文件列表
      */
     @ApiOperation("导出最近文件列表")
-    @PreAuthorize("@ss.hasPermi('biz:recent:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:recent:export')")
     @Log(title = "最近文件", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocRecent docRecent)
@@ -69,7 +69,7 @@ public class DocRecentController extends BaseController
      * 获取最近文件详细信息
      */
     @ApiOperation("获取最近文件详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:recent:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:recent:query')")
     @GetMapping(value = "/{recentId}")
     public AjaxResult getInfo(@PathVariable("recentId") Long recentId)
     {
@@ -80,7 +80,7 @@ public class DocRecentController extends BaseController
      * 新增最近文件
      */
     @ApiOperation("新增最近文件")
-    @PreAuthorize("@ss.hasPermi('biz:recent:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:recent:add')")
     @Log(title = "最近文件", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocRecent docRecent)
@@ -92,7 +92,7 @@ public class DocRecentController extends BaseController
      * 修改最近文件
      */
     @ApiOperation("修改最近文件")
-    @PreAuthorize("@ss.hasPermi('biz:recent:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:recent:edit')")
     @Log(title = "最近文件", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocRecent docRecent)
@@ -104,7 +104,7 @@ public class DocRecentController extends BaseController
      * 删除最近文件
      */
     @ApiOperation("删除最近文件")
-    @PreAuthorize("@ss.hasPermi('biz:recent:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:recent:remove')")
     @Log(title = "最近文件", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{recentIds}")
     public AjaxResult remove(@PathVariable Long[] recentIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocShareController.java

@@ -42,7 +42,7 @@ public class DocShareController extends BaseController
      * 查询文档分享列表
      */
     @ApiOperation("查询文档分享列表")
-    @PreAuthorize("@ss.hasPermi('biz:share:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:share:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocShare docShare)
     {
@@ -55,7 +55,7 @@ public class DocShareController extends BaseController
      * 导出文档分享列表
      */
     @ApiOperation("导出文档分享列表")
-    @PreAuthorize("@ss.hasPermi('biz:share:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:share:export')")
     @Log(title = "文档分享", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocShare docShare)
@@ -69,7 +69,7 @@ public class DocShareController extends BaseController
      * 获取文档分享详细信息
      */
     @ApiOperation("获取文档分享详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:share:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:share:query')")
     @GetMapping(value = "/{shareId}")
     public AjaxResult getInfo(@PathVariable("shareId") Long shareId)
     {
@@ -80,7 +80,7 @@ public class DocShareController extends BaseController
      * 新增文档分享
      */
     @ApiOperation("新增文档分享")
-    @PreAuthorize("@ss.hasPermi('biz:share:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:share:add')")
     @Log(title = "文档分享", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocShare docShare)
@@ -92,7 +92,7 @@ public class DocShareController extends BaseController
      * 修改文档分享
      */
     @ApiOperation("修改文档分享")
-    @PreAuthorize("@ss.hasPermi('biz:share:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:share:edit')")
     @Log(title = "文档分享", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocShare docShare)
@@ -104,7 +104,7 @@ public class DocShareController extends BaseController
      * 删除文档分享
      */
     @ApiOperation("删除文档分享")
-    @PreAuthorize("@ss.hasPermi('biz:share:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:share:remove')")
     @Log(title = "文档分享", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{shareIds}")
     public AjaxResult remove(@PathVariable Long[] shareIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocSpaceController.java

@@ -42,7 +42,7 @@ public class DocSpaceController extends BaseController
      * 查询文档空间管理列表
      */
     @ApiOperation("查询文档空间管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:space:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:space:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocSpace docSpace)
     {
@@ -55,7 +55,7 @@ public class DocSpaceController extends BaseController
      * 导出文档空间管理列表
      */
     @ApiOperation("导出文档空间管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:space:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:space:export')")
     @Log(title = "文档空间管理", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocSpace docSpace)
@@ -69,7 +69,7 @@ public class DocSpaceController extends BaseController
      * 获取文档空间管理详细信息
      */
     @ApiOperation("获取文档空间管理详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:space:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:space:query')")
     @GetMapping(value = "/{spaceId}")
     public AjaxResult getInfo(@PathVariable("spaceId") Long spaceId)
     {
@@ -80,7 +80,7 @@ public class DocSpaceController extends BaseController
      * 新增文档空间管理
      */
     @ApiOperation("新增文档空间管理")
-    @PreAuthorize("@ss.hasPermi('biz:space:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:space:add')")
     @Log(title = "文档空间管理", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocSpace docSpace)
@@ -92,7 +92,7 @@ public class DocSpaceController extends BaseController
      * 修改文档空间管理
      */
     @ApiOperation("修改文档空间管理")
-    @PreAuthorize("@ss.hasPermi('biz:space:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:space:edit')")
     @Log(title = "文档空间管理", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocSpace docSpace)
@@ -104,7 +104,7 @@ public class DocSpaceController extends BaseController
      * 删除文档空间管理
      */
     @ApiOperation("删除文档空间管理")
-    @PreAuthorize("@ss.hasPermi('biz:space:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:space:remove')")
     @Log(title = "文档空间管理", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{spaceIds}")
     public AjaxResult remove(@PathVariable Long[] spaceIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocSpaceExpansionController.java

@@ -42,7 +42,7 @@ public class DocSpaceExpansionController extends BaseController
      * 查询空间扩容管理列表
      */
     @ApiOperation("查询空间扩容管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:expansion:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:expansion:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocSpaceExpansion docSpaceExpansion)
     {
@@ -55,7 +55,7 @@ public class DocSpaceExpansionController extends BaseController
      * 导出空间扩容管理列表
      */
     @ApiOperation("导出空间扩容管理列表")
-    @PreAuthorize("@ss.hasPermi('biz:expansion:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:expansion:export')")
     @Log(title = "空间扩容管理", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocSpaceExpansion docSpaceExpansion)
@@ -69,7 +69,7 @@ public class DocSpaceExpansionController extends BaseController
      * 获取空间扩容管理详细信息
      */
     @ApiOperation("获取空间扩容管理详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:expansion:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:expansion:query')")
     @GetMapping(value = "/{autoId}")
     public AjaxResult getInfo(@PathVariable("autoId") Long autoId)
     {
@@ -80,7 +80,7 @@ public class DocSpaceExpansionController extends BaseController
      * 新增空间扩容管理
      */
     @ApiOperation("新增空间扩容管理")
-    @PreAuthorize("@ss.hasPermi('biz:expansion:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:expansion:add')")
     @Log(title = "空间扩容管理", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocSpaceExpansion docSpaceExpansion)
@@ -92,7 +92,7 @@ public class DocSpaceExpansionController extends BaseController
      * 修改空间扩容管理
      */
     @ApiOperation("修改空间扩容管理")
-    @PreAuthorize("@ss.hasPermi('biz:expansion:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:expansion:edit')")
     @Log(title = "空间扩容管理", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocSpaceExpansion docSpaceExpansion)
@@ -104,7 +104,7 @@ public class DocSpaceExpansionController extends BaseController
      * 删除空间扩容管理
      */
     @ApiOperation("删除空间扩容管理")
-    @PreAuthorize("@ss.hasPermi('biz:expansion:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:expansion:remove')")
     @Log(title = "空间扩容管理", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{autoIds}")
     public AjaxResult remove(@PathVariable Long[] autoIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocTransferController.java

@@ -42,7 +42,7 @@ public class DocTransferController extends BaseController
      * 查询文件传输列表
      */
     @ApiOperation("查询文件传输列表")
-    @PreAuthorize("@ss.hasPermi('biz:transfer:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:transfer:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocTransfer docTransfer)
     {
@@ -55,7 +55,7 @@ public class DocTransferController extends BaseController
      * 导出文件传输列表
      */
     @ApiOperation("导出文件传输列表")
-    @PreAuthorize("@ss.hasPermi('biz:transfer:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:transfer:export')")
     @Log(title = "文件传输", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocTransfer docTransfer)
@@ -69,7 +69,7 @@ public class DocTransferController extends BaseController
      * 获取文件传输详细信息
      */
     @ApiOperation("获取文件传输详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:transfer:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:transfer:query')")
     @GetMapping(value = "/{tranId}")
     public AjaxResult getInfo(@PathVariable("tranId") Long tranId)
     {
@@ -80,7 +80,7 @@ public class DocTransferController extends BaseController
      * 新增文件传输
      */
     @ApiOperation("新增文件传输")
-    @PreAuthorize("@ss.hasPermi('biz:transfer:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:transfer:add')")
     @Log(title = "文件传输", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocTransfer docTransfer)
@@ -92,7 +92,7 @@ public class DocTransferController extends BaseController
      * 修改文件传输
      */
     @ApiOperation("修改文件传输")
-    @PreAuthorize("@ss.hasPermi('biz:transfer:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:transfer:edit')")
     @Log(title = "文件传输", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocTransfer docTransfer)
@@ -104,7 +104,7 @@ public class DocTransferController extends BaseController
      * 删除文件传输
      */
     @ApiOperation("删除文件传输")
-    @PreAuthorize("@ss.hasPermi('biz:transfer:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:transfer:remove')")
     @Log(title = "文件传输", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{tranIds}")
     public AjaxResult remove(@PathVariable Long[] tranIds)

+ 6 - 6
doc-biz/src/main/java/com/doc/biz/controller/DocVersionController.java

@@ -42,7 +42,7 @@ public class DocVersionController extends BaseController
      * 查询文档版本信息列表
      */
     @ApiOperation("查询文档版本信息列表")
-    @PreAuthorize("@ss.hasPermi('biz:version:list')")
+    //@PreAuthorize("@ss.hasPermi('biz:version:list')")
     @GetMapping("/list")
     public TableDataInfo list(DocVersion docVersion)
     {
@@ -55,7 +55,7 @@ public class DocVersionController extends BaseController
      * 导出文档版本信息列表
      */
     @ApiOperation("导出文档版本信息列表")
-    @PreAuthorize("@ss.hasPermi('biz:version:export')")
+    //@PreAuthorize("@ss.hasPermi('biz:version:export')")
     @Log(title = "文档版本信息", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocVersion docVersion)
@@ -69,7 +69,7 @@ public class DocVersionController extends BaseController
      * 获取文档版本信息详细信息
      */
     @ApiOperation("获取文档版本信息详细信息")
-    @PreAuthorize("@ss.hasPermi('biz:version:query')")
+    //@PreAuthorize("@ss.hasPermi('biz:version:query')")
     @GetMapping(value = "/{versionId}")
     public AjaxResult getInfo(@PathVariable("versionId") Long versionId)
     {
@@ -80,7 +80,7 @@ public class DocVersionController extends BaseController
      * 新增文档版本信息
      */
     @ApiOperation("新增文档版本信息")
-    @PreAuthorize("@ss.hasPermi('biz:version:add')")
+    //@PreAuthorize("@ss.hasPermi('biz:version:add')")
     @Log(title = "文档版本信息", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody DocVersion docVersion)
@@ -92,7 +92,7 @@ public class DocVersionController extends BaseController
      * 修改文档版本信息
      */
     @ApiOperation("修改文档版本信息")
-    @PreAuthorize("@ss.hasPermi('biz:version:edit')")
+    //@PreAuthorize("@ss.hasPermi('biz:version:edit')")
     @Log(title = "文档版本信息", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody DocVersion docVersion)
@@ -104,7 +104,7 @@ public class DocVersionController extends BaseController
      * 删除文档版本信息
      */
     @ApiOperation("删除文档版本信息")
-    @PreAuthorize("@ss.hasPermi('biz:version:remove')")
+    //@PreAuthorize("@ss.hasPermi('biz:version:remove')")
     @Log(title = "文档版本信息", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{versionIds}")
     public AjaxResult remove(@PathVariable Long[] versionIds)

+ 100 - 0
doc-biz/src/main/java/com/doc/biz/controller/FileUploadController.java

@@ -0,0 +1,100 @@
+package com.doc.biz.controller;
+
+import com.doc.biz.service.IMongoService;
+import com.doc.biz.vo.DocumentVO;
+import com.doc.common.core.controller.BaseController;
+import com.doc.common.core.domain.AjaxResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.yaml.snakeyaml.util.UriEncoder;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 文件上传
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api")
+public class FileUploadController extends BaseController {
+
+    /**
+     * 文件上传实现类
+     */
+    @Resource
+    private IMongoService mongoService;
+
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     */
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(@RequestParam(value = "file") MultipartFile file) {
+        try {
+            return success(mongoService.uploadFile(file));
+        } catch (Exception e) {
+            log.error("文件上传失败:", e);
+            return error(e.getMessage());
+        }
+    }
+
+    /**
+     * 多文件上传
+     *
+     * @param files
+     * @return
+     */
+    @PostMapping("/uploadFiles")
+    public AjaxResult uploadFile(@RequestParam(value = "files") List<MultipartFile> files) {
+        try {
+            return success(mongoService.uploadFiles(files));
+        } catch (Exception e) {
+            return error(e.getMessage());
+        }
+    }
+
+    /**
+     * 文件下载
+     *
+     * @param fileId
+     * @return
+     */
+    @GetMapping("/download/{fileId}")
+    public ResponseEntity<Object> fileDownload(@PathVariable(name = "fileId") String fileId) {
+        DocumentVO mongoFileVo = mongoService.downloadFile(fileId);
+
+        if (Objects.nonNull(mongoFileVo)) {
+            return ResponseEntity.ok()
+                    .header(HttpHeaders.CONTENT_DISPOSITION, "filename=\"" + UriEncoder.encode(mongoFileVo.getFileName()) + "\"")
+                    .header(HttpHeaders.CONTENT_TYPE, mongoFileVo.getContentType())
+                    .header(HttpHeaders.CONTENT_LENGTH, mongoFileVo.getFileSize() + "").header("Connection", "close")
+                    .body(mongoFileVo.getData());
+        } else {
+            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("file does not exist");
+        }
+    }
+
+    /**
+     * 文件删除
+     *
+     * @param fileId
+     * @return
+     */
+    @DeleteMapping("/remove/{fileId}")
+    public AjaxResult removeFile(@PathVariable(name = "fileId") String fileId) {
+        mongoService.removeFile(fileId);
+        return success("删除成功");
+    }
+
+}

+ 73 - 0
doc-biz/src/main/java/com/doc/biz/domain/DocumentFile.java

@@ -0,0 +1,73 @@
+package com.doc.biz.domain;
+
+import lombok.Builder;
+import lombok.Data;
+import org.bson.types.Binary;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * MongoDB文件实体
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+@Document(value = "doc")
+@Builder
+@Data
+public class DocumentFile {
+
+    /**
+     * 主键
+     */
+    @Id
+    public String id;
+
+    /**
+     * 文件名称
+     */
+    public String fileName;
+
+    /**
+     * 文件大小
+     */
+    public long fileSize;
+
+    /**
+     * 上传时间
+     */
+    public Date uploadDate;
+
+    /**
+     * MD5值
+     */
+    public String md5;
+
+    /**
+     * 文件内容
+     */
+    private Binary content;
+
+    /**
+     * 文件类型
+     */
+    public String contentType;
+
+    /**
+     * 文件后缀名
+     */
+    public String suffix;
+
+    /**
+     * 文件描述
+     */
+    public String description;
+
+    /**
+     * 大文件管理GridFS的ID
+     */
+    private String gridFsId;
+
+}

+ 14 - 0
doc-biz/src/main/java/com/doc/biz/mapper/MongoFileRepository.java

@@ -0,0 +1,14 @@
+package com.doc.biz.mapper;
+
+import com.doc.biz.domain.DocumentFile;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+/**
+ * Mongo repository
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+public interface MongoFileRepository extends MongoRepository<DocumentFile, String> {
+
+}

+ 45 - 0
doc-biz/src/main/java/com/doc/biz/service/IMongoService.java

@@ -0,0 +1,45 @@
+package com.doc.biz.service;
+
+import com.doc.biz.vo.DocumentVO;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * Mongo存储Service接口
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+public interface IMongoService {
+    /**
+     * 文件上传
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    DocumentVO uploadFile(MultipartFile file) throws Exception;
+
+    /**
+     * 多文件上传
+     *
+     * @param files
+     * @return
+     */
+    List<DocumentVO> uploadFiles(List<MultipartFile> files);
+
+    /**
+     * 文件下载
+     *
+     * @param fileId
+     * @return
+     */
+    DocumentVO downloadFile(String fileId);
+
+    /**
+     * 文件删除
+     *
+     * @param fileId
+     */
+    void removeFile(String fileId);
+}

+ 271 - 0
doc-biz/src/main/java/com/doc/biz/service/impl/MongoServiceImpl.java

@@ -0,0 +1,271 @@
+package com.doc.biz.service.impl;
+
+import cn.hutool.core.io.IoUtil;
+import com.doc.biz.domain.DocumentFile;
+import com.doc.biz.mapper.MongoFileRepository;
+import com.doc.biz.service.IMongoService;
+import com.doc.biz.vo.DocumentVO;
+import com.doc.common.constant.Constants;
+import com.doc.common.utils.sign.Md5Utils;
+import com.mongodb.client.gridfs.GridFSBucket;
+import com.mongodb.client.gridfs.GridFSDownloadStream;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.types.Binary;
+import org.bson.types.ObjectId;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.gridfs.GridFsTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * 文档协作Service业务层处理
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+@Slf4j
+@Service
+public class MongoServiceImpl implements IMongoService {
+
+    @Resource
+    private MongoFileRepository mongoFileRepository;
+    @Resource
+    private MongoTemplate mongoTemplate;
+    @Resource
+    private GridFsTemplate gridFsTemplate;
+    @Resource
+    private GridFSBucket gridFSBucket;
+
+    /**
+     * 多文件上传
+     *
+     * @param files
+     * @return
+     */
+    @Override
+    public List<DocumentVO> uploadFiles(List<MultipartFile> files) {
+
+        return files.stream().map(file -> {
+            try {
+                return this.uploadFile(file);
+            } catch (Exception e) {
+                log.error("文件上传失败", e);
+                return null;
+            }
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+    }
+
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public DocumentVO uploadFile(MultipartFile file) throws Exception {
+        if (file.getSize() > Constants.MONGO_FILE_SIZE) {
+            return this.saveGridFsFile(file);
+        } else {
+            return this.saveBinaryFile(file);
+        }
+    }
+
+    /**
+     * 文件下载
+     *
+     * @param fileId
+     * @return
+     */
+    @Override
+    public DocumentVO downloadFile(String fileId) {
+        Optional<DocumentFile> option = this.getBinaryFileById(fileId);
+
+        if (option.isPresent()) {
+            DocumentFile documentFile = option.get();
+            if (Objects.isNull(documentFile.getContent())) {
+                option = this.getGridFsFileById(fileId);
+            }
+        }
+
+
+        return option.map(DocumentVO::new).orElse(null);
+    }
+
+    /**
+     * 文件删除
+     *
+     * @param fileId
+     */
+    @Override
+    public void removeFile(String fileId) {
+        Optional<DocumentFile> option = this.getBinaryFileById(fileId);
+
+        if (option.isPresent()) {
+            if (Objects.nonNull(option.get().getGridFsId())) {
+                this.removeGridFsFile(fileId);
+            } else {
+                this.removeBinaryFile(fileId);
+            }
+        }
+    }
+
+    /**
+     * 删除Binary文件
+     *
+     * @param fileId
+     */
+    public void removeBinaryFile(String fileId) {
+        mongoFileRepository.deleteById(fileId);
+    }
+
+    /**
+     * 删除GridFs文件
+     *
+     * @param fileId
+     */
+    public void removeGridFsFile(String fileId) {
+        // 根据id查询文件
+        DocumentFile documentFile = mongoTemplate.findById(fileId, DocumentFile.class);
+        if (Objects.nonNull(documentFile)) {
+            // 根据文件ID删除fs.files和fs.chunks中的记录
+            Query deleteFileQuery = new Query().addCriteria(Criteria.where("_id").is(documentFile.getGridFsId()));
+            gridFsTemplate.delete(deleteFileQuery);
+            // 删除集合documentFile中的数据
+            Query deleteQuery = new Query(Criteria.where("id").is(fileId));
+            mongoTemplate.remove(deleteQuery, DocumentFile.class);
+        }
+    }
+
+    /**
+     * 保存Binary文件(小文件)
+     *
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    public DocumentVO saveBinaryFile(MultipartFile file) throws Exception {
+
+        String suffix = getFileSuffix(file);
+        DocumentFile documentFile = null;
+        try (InputStream in = file.getInputStream()) {
+            documentFile = mongoFileRepository.save(
+                    DocumentFile.builder()
+                            .fileName(file.getOriginalFilename())
+                            .fileSize(file.getSize())
+                            .content(new Binary(file.getBytes()))
+                            .contentType(file.getContentType())
+                            .uploadDate(new Date())
+                            .suffix(suffix)
+                            .md5(Md5Utils.getMd5ByInputStream(in))
+                            .build()
+            );
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw e;
+            // 抛出异常,让调用方处理
+        }
+
+        return new DocumentVO(documentFile);
+    }
+
+    /**
+     * 保存GridFs文件(大文件)
+     *
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    public DocumentVO saveGridFsFile(MultipartFile file) throws Exception {
+        String suffix = getFileSuffix(file);
+        DocumentFile documentFile = null;
+        try (InputStream in = file.getInputStream()) {
+            String gridFsId = this.storeFileToGridFS(in, file.getOriginalFilename(), file.getContentType());
+            documentFile = mongoFileRepository.save(
+                    DocumentFile.builder()
+                            .fileName(file.getOriginalFilename())
+                            .fileSize(file.getSize())
+                            .contentType(file.getContentType())
+                            .uploadDate(new Date())
+                            .suffix(suffix)
+                            .md5(Md5Utils.getMd5ByInputStream(in))
+                            .gridFsId(gridFsId)
+                            .build()
+            );
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw e;
+            // 抛出异常,让调用方处理
+        }
+
+
+        return new DocumentVO(documentFile);
+    }
+
+    /**
+     * 上传文件到Mongodb的GridFs中
+     *
+     * @param in
+     * @param contentType
+     * @return
+     */
+    public String storeFileToGridFS(InputStream in, String filename, String contentType) {
+        // 将文件存储进GridFS中
+        ObjectId gridFsId = gridFsTemplate.store(in, filename, contentType);
+        return gridFsId.toString();
+    }
+
+    /**
+     * 获取Binary文件
+     *
+     * @param id
+     * @return
+     */
+    public Optional<DocumentFile> getBinaryFileById(String id) {
+        return mongoFileRepository.findById(id);
+    }
+
+    /**
+     * 获取Grid文件
+     *
+     * @param id
+     * @return
+     */
+    public Optional<DocumentFile> getGridFsFileById(String id) {
+        DocumentFile documentFile = mongoTemplate.findById(id, DocumentFile.class);
+        if (Objects.nonNull(documentFile)) {
+            try (GridFSDownloadStream in = gridFSBucket.openDownloadStream(new ObjectId(documentFile.getGridFsId()))) {
+                documentFile.setContent(new Binary(IoUtil.readBytes(in)));
+                return Optional.of(documentFile);
+            } catch (Exception e) {
+                log.error("获取MongoDB大文件失败", e);
+            }
+        }
+
+        return Optional.empty();
+    }
+
+    /**
+     * 获取文件后缀
+     *
+     * @param file
+     * @return
+     */
+    private String getFileSuffix(MultipartFile file) {
+        String suffix = "";
+        if (Objects.requireNonNull(file.getOriginalFilename()).contains(".")) {
+            suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+        }
+        return suffix;
+    }
+}

+ 40 - 0
doc-biz/src/main/java/com/doc/biz/vo/DocumentVO.java

@@ -0,0 +1,40 @@
+package com.doc.biz.vo;
+
+import com.doc.biz.domain.DocumentFile;
+import com.doc.common.utils.bean.BeanUtils;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 文件统一下载VO
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+@Data
+public class DocumentVO {
+
+    private String fileId;
+
+    private String fileName;
+
+    private String contentType;
+
+    private String suffix;
+
+    private Long fileSize;
+
+    @JsonIgnore
+    private byte[] data;
+
+    public DocumentVO(DocumentFile mongoFile) {
+        BeanUtils.copyProperties(mongoFile, this);
+        if (Objects.nonNull(mongoFile.getContent())) {
+            this.data = mongoFile.getContent().getData();
+        }
+        this.fileId = mongoFile.getId();
+    }
+
+}

+ 20 - 3
doc-common/pom.xml

@@ -112,6 +112,12 @@
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
 
+        <!-- 集成mongodb -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
+
         <!-- pool 对象池 -->
         <dependency>
             <groupId>org.apache.commons</groupId>
@@ -129,12 +135,23 @@
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
         </dependency>
-
-        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
+        <!-- swagger3-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+        </dependency>
+        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.8版本 -->
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-models</artifactId>
-            <version>1.6.2</version>
+            <version>1.6.8</version>
+        </dependency>
+
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.18</version>
         </dependency>
 
     </dependencies>

+ 36 - 0
doc-common/src/main/java/com/doc/common/config/MongoConfig.java

@@ -0,0 +1,36 @@
+package com.doc.common.config;
+
+import com.mongodb.client.MongoDatabase;
+import com.mongodb.client.gridfs.GridFSBucket;
+import com.mongodb.client.gridfs.GridFSBuckets;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import javax.annotation.Resource;
+
+/**
+ * Mongodb配置类
+ *
+ * @author wukai
+ * @date 2023-08-15
+ */
+@Configuration
+public class MongoConfig {
+    /**
+     * 数据库配置信息
+     */
+    @Resource
+    private MongoTemplate mongoTemplate;
+
+    /**
+     * GridFSBucket用于打开下载流
+     *
+     * @return GridFSBucket
+     */
+    @Bean
+    public GridFSBucket getGridFSBucket() {
+        MongoDatabase db = mongoTemplate.getDb();
+        return GridFSBuckets.create(db);
+    }
+}

+ 11 - 7
doc-common/src/main/java/com/doc/common/constant/Constants.java

@@ -4,11 +4,10 @@ import io.jsonwebtoken.Claims;
 
 /**
  * 通用常量信息
- * 
+ *
  * @author ruoyi
  */
-public class Constants
-{
+public class Constants {
     /**
      * UTF-8 字符集
      */
@@ -63,7 +62,7 @@ public class Constants
      * 登录失败
      */
     public static final String LOGIN_FAIL = "Error";
- 
+
     /**
      * 验证码有效期(分钟)
      */
@@ -132,11 +131,16 @@ public class Constants
     /**
      * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
      */
-    public static final String[] JOB_WHITELIST_STR = { "com.doc" };
+    public static final String[] JOB_WHITELIST_STR = {"com.doc"};
 
     /**
      * 定时任务违规的字符
      */
-    public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
-            "org.springframework", "org.apache", "com.doc.common.utils.file", "com.doc.common.config" };
+    public static final String[] JOB_ERROR_STR = {"java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
+            "org.springframework", "org.apache", "com.doc.common.utils.file", "com.doc.common.config"};
+    /**
+     * Mongo文件存储方式大小切换
+     * 大于该值使用gridFS存储,小于等于该值的直接二进制存储
+     */
+    public static final long MONGO_FILE_SIZE = 16 * 16 * 1024;
 }

+ 38 - 25
doc-common/src/main/java/com/doc/common/utils/sign/Md5Utils.java

@@ -1,50 +1,45 @@
 package com.doc.common.utils.sign;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Md5加密方法
- * 
+ *
  * @author ruoyi
  */
-public class Md5Utils
-{
+public class Md5Utils {
     private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
 
-    private static byte[] md5(String s)
-    {
+    private static byte[] md5(String s) {
         MessageDigest algorithm;
-        try
-        {
+        try {
             algorithm = MessageDigest.getInstance("MD5");
             algorithm.reset();
             algorithm.update(s.getBytes("UTF-8"));
             byte[] messageDigest = algorithm.digest();
             return messageDigest;
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             log.error("MD5 Error...", e);
         }
         return null;
     }
 
-    private static final String toHex(byte hash[])
-    {
-        if (hash == null)
-        {
+    private static final String toHex(byte hash[]) {
+        if (hash == null) {
             return null;
         }
         StringBuffer buf = new StringBuffer(hash.length * 2);
         int i;
 
-        for (i = 0; i < hash.length; i++)
-        {
-            if ((hash[i] & 0xff) < 0x10)
-            {
+        for (i = 0; i < hash.length; i++) {
+            if ((hash[i] & 0xff) < 0x10) {
                 buf.append("0");
             }
             buf.append(Long.toString(hash[i] & 0xff, 16));
@@ -52,16 +47,34 @@ public class Md5Utils
         return buf.toString();
     }
 
-    public static String hash(String s)
-    {
-        try
-        {
+    public static String hash(String s) {
+        try {
             return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             log.error("not supported charset...{}", e);
             return s;
         }
     }
+
+    /**
+     * 获取文件输入流的MD5值
+     */
+    public static String getMd5ByInputStream(InputStream is) throws NoSuchAlgorithmException, IOException {
+        StringBuffer md5 = new StringBuffer();
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        byte[] dataBytes = new byte[1024];
+
+        int nread = 0;
+        while ((nread = is.read(dataBytes)) != -1) {
+            md.update(dataBytes, 0, nread);
+        }
+        ;
+        byte[] mdbytes = md.digest();
+
+        // convert the byte to hex format
+        for (int i = 0; i < mdbytes.length; i++) {
+            md5.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
+        }
+        return md5.toString();
+    }
 }

+ 5 - 1
doc-framework/pom.xml

@@ -18,7 +18,7 @@
     <dependencies>
 
         <!-- SpringBoot Web容器 -->
-         <dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
@@ -58,6 +58,10 @@
             <groupId>com.jjt</groupId>
             <artifactId>jjt-system</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 2 - 0
doc-framework/src/main/java/com/doc/framework/config/SecurityConfig.java

@@ -113,6 +113,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 .antMatchers("/login", "/register", "/captchaImage").permitAll()
+                // 增加API接口允许匿名访问
+                .antMatchers("/api/**").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 33 - 0
doc-framework/src/main/java/com/doc/framework/interceptor/ExceptionInterceptor.java

@@ -0,0 +1,33 @@
+package com.doc.framework.interceptor;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.connector.ClientAbortException;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 下载文件时报错处理
+ * org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
+ *
+ * @author wukai
+ */
+@ControllerAdvice(basePackages = {"com.doc.biz.controller"})
+@Slf4j
+public class ExceptionInterceptor extends ResponseEntityExceptionHandler {
+    @ExceptionHandler(ClientAbortException.class)
+    @ResponseBody
+    ResponseEntity<?> handlerClientAbortException(HttpServletRequest request, HttpServletResponse response, Throwable ex) {
+        //日志自己处理
+        log.warn("这个错误不用管,有点莫名其妙!");
+        //此处一定要返回null了,因为客户端已经断开连接,返回请求没啥用了
+        return null;
+    }
+}