zhangenzhi 2 gadi atpakaļ
vecāks
revīzija
90c7fa27b6

+ 9 - 4
src/main/java/com/pavis/backend/slim/framework/config/MinioConfig.java

@@ -2,6 +2,7 @@ package com.pavis.backend.slim.framework.config;
 
 import io.minio.BucketExistsArgs;
 import io.minio.DownloadObjectArgs;
+
 import io.minio.MinioClient;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
@@ -29,8 +30,13 @@ public class MinioConfig {
 
     @Bean
     public MinioClient client() {
-        return MinioClient.builder().endpoint(url)
+        // return MinioClient.builder().endpoint(url)
+        //         .credentials(accessKey, secretKey).build();
+        MinioClient minioClient=MinioClient.builder().endpoint(url)
                 .credentials(accessKey, secretKey).build();
+        this.minioClient=minioClient;
+        return minioClient;
+
     }
 
 
@@ -55,7 +61,7 @@ public class MinioConfig {
      * @param bucketName   下载指定服务器的桶名称
      * @param objectName   下载的文件名称
      */
-    public void downloadPath(String downloadPath, String bucketName, String objectName) throws Exception {
+    public void downloadPath(String downloadPath, String bucketName, String objectName,String originalName) throws Exception {
         if (downloadPath.isEmpty() || !StringUtils.hasLength(bucketName) || !StringUtils.hasLength(objectName)) {
             throw new RuntimeException("下载文件参数不全!");
         }
@@ -68,8 +74,7 @@ public class MinioConfig {
             throw new RuntimeException("当前操作的桶不存在!");
         }
 
-        downloadPath += objectName;
-
+        downloadPath += originalName;
         minioClient.downloadObject(
                 DownloadObjectArgs.builder()
                         .bucket(bucketName) //指定是在哪一个桶下载

+ 1 - 1
src/main/java/com/pavis/backend/slim/framework/config/SecurityConfig.java

@@ -123,7 +123,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 .antMatchers("/login", "/register","/kg/createKg","/kg/algorithm"
-                ,"/office/online","/office/save","/preview","/down").permitAll()
+                ,"/office/online","/office/save").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 20 - 5
src/main/java/com/pavis/backend/slim/project/system/controller/SysFileController.java

@@ -2,10 +2,12 @@ package com.pavis.backend.slim.project.system.controller;
 
 import cn.hutool.core.io.resource.InputStreamResource;
 import com.pavis.backend.slim.framework.config.MinioConfig;
+import com.pavis.backend.slim.framework.minio.MinioStorage;
 import com.pavis.backend.slim.framework.web.domain.AjaxResult;
 import com.pavis.backend.slim.project.system.domain.SysFile;
 import com.pavis.backend.slim.project.system.minio.MinioFileUtil;
 import com.pavis.backend.slim.project.system.service.SysFileService;
+import com.pavis.backend.slim.project.system.service.SysKbService;
 import io.minio.GetObjectArgs;
 import io.minio.GetObjectResponse;
 import io.minio.MinioClient;
@@ -13,11 +15,14 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 
 /**
@@ -30,12 +35,20 @@ public class SysFileController {
     @Autowired
     private SysFileService fileService;
 
-    // @Autowired
-    // private MinioFileUtil minioFileUtil;
-
     @Autowired
     private MinioConfig minioFileUtil;
 
+    @Autowired
+    private SysKbService sysKbService;
+
+    @Autowired
+    MinioStorage storage;
+
+    @Value("${minio.bucketName}")
+    private String bucketName;
+
+    @Value("${pavis.profile}")
+    private String urlLocal;
 
     @ApiOperation("单个文件上传")
     @ApiImplicitParams({
@@ -91,8 +104,10 @@ public class SysFileController {
      * @throws Exception
      */
     @GetMapping("/down")
-    void downloadPath() throws Exception {
+    public AjaxResult downloadPath(@RequestParam("objectName")String objectName,@RequestParam("originalName")String name ) throws Exception {
         MinioClient client = minioFileUtil.client();
-        minioFileUtil.downloadPath("D:\\Temp", "default", "1/文章/6556bc8724ea41808c6d32839a2d8576.docx");
+        minioFileUtil.downloadPath(urlLocal, bucketName,objectName,name);
+        return AjaxResult.success();
     }
+
 }

+ 28 - 0
src/main/java/com/pavis/backend/slim/project/system/controller/SysKbController.java

@@ -17,6 +17,8 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -39,6 +41,9 @@ public class SysKbController {
     @Autowired
     private SysKbFileService kbFileService;
 
+    @Autowired
+    private SysKbService sysKbService;
+
     @ApiOperation("创建知识库")
     @PostMapping("/create")
     public AjaxResult createKb(@Validated @RequestBody SysKb kb) {
@@ -138,4 +143,27 @@ public class SysKbController {
         }
         return AjaxResult.success(kbService.searchFile(fileKey));
     }
+
+    @ApiOperation("文件预览接口")
+    @GetMapping("/previewFile")
+    public AjaxResult previewFile(HttpServletResponse response, HttpServletRequest request) throws Exception {
+        String fileId = "8f45bda3db84b0049fa7405abb1dd235";
+        kbService.previewFile(fileId, response, request);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("文件保存接口")
+    @PostMapping("/saveFile")
+    public AjaxResult saveFile(HttpServletResponse response, HttpServletRequest request) {
+        String name = "8b9bbd99841d4cf4beb156e84289887e.docx";
+        sysKbService.saveFile(response, request, name);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("删除本地文件")
+    @GetMapping("/deleteFile")
+    public AjaxResult deleteFile(@RequestParam("filePath") String filePath) {
+        fileService.deleteFile(filePath);
+        return AjaxResult.success();
+    }
 }

+ 7 - 0
src/main/java/com/pavis/backend/slim/project/system/service/SysFileService.java

@@ -77,4 +77,11 @@ public interface SysFileService extends IService<SysFile> {
      * @return 修改后的文件详情
      */
     public SysFile updateFile(SysFile file);
+
+    /**
+     * 删除本地单个文件
+     * @param   sPath    被删除文件的文件名
+     * @return 单个文件删除成功返回true,否则返回false
+     */
+    boolean deleteFile(String sPath);
 }

+ 19 - 0
src/main/java/com/pavis/backend/slim/project/system/service/SysKbService.java

@@ -6,6 +6,8 @@ import com.pavis.backend.slim.project.system.domain.SysFile;
 import com.pavis.backend.slim.project.system.domain.SysKb;
 import com.pavis.backend.slim.project.system.domain.front.FileKey;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -75,4 +77,21 @@ public interface SysKbService extends IService<SysKb> {
      * @param kbId 知识库id
      */
     void delFileAndRelation(String kbId);
+
+    /**
+     * 文件预览
+     * @param fileId 文件id
+     * @param response
+     * @param request
+     * @throws Exception
+     */
+    void previewFile(String fileId, HttpServletResponse response, HttpServletRequest request) throws Exception;
+
+    /**
+     * 保存文件
+     * @param response
+     * @param request
+     * @param name 文件名字
+     */
+    void saveFile(HttpServletResponse response, HttpServletRequest request, String name);
 }

+ 13 - 0
src/main/java/com/pavis/backend/slim/project/system/service/impl/SysFileServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Files;
@@ -227,4 +228,16 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
         return file;
     }
 
+    @Override
+    public boolean deleteFile(String sPath) {
+        boolean flag = false;
+        File file = new File(sPath);
+        // 路径为文件且不为空则进行删除
+        if (file.isFile() && file.exists()) {
+            file.delete();
+            flag = true;
+        }
+        return flag;
+    }
+
 }

+ 131 - 0
src/main/java/com/pavis/backend/slim/project/system/service/impl/SysKbServiceImpl.java

@@ -2,6 +2,7 @@ package com.pavis.backend.slim.project.system.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,6 +10,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.pavis.backend.slim.common.constant.Hodgepodge;
 import com.pavis.backend.slim.common.utils.SecurityUtils;
+import com.pavis.backend.slim.framework.config.MinioConfig;
 import com.pavis.backend.slim.project.system.domain.SysFile;
 import com.pavis.backend.slim.project.system.domain.SysKb;
 import com.pavis.backend.slim.project.system.domain.SysKbFile;
@@ -16,11 +18,26 @@ import com.pavis.backend.slim.project.system.domain.front.FileKey;
 import com.pavis.backend.slim.project.system.mapper.SysFileMapper;
 import com.pavis.backend.slim.project.system.mapper.SysKbFileMapper;
 import com.pavis.backend.slim.project.system.mapper.SysKbMapper;
+import com.pavis.backend.slim.project.system.service.SysFileService;
 import com.pavis.backend.slim.project.system.service.SysKbService;
+import io.minio.MinioClient;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -43,6 +60,17 @@ public class SysKbServiceImpl extends ServiceImpl<SysKbMapper, SysKb> implements
     @Autowired
     private SysKbMapper sysKbMapper;
 
+    @Autowired
+    private SysFileService sysFileService;
+
+    @Autowired
+    private MinioConfig minioFileUtil;
+
+    @Value("${pavis.profile}")
+    private String urlLocal;
+    @Value("${minio.bucketName}")
+    private String bucketName;
+
     @Override
     public SysKb create(SysKb kb) {
         kb.setCreateBy(SecurityUtils.getUsername());
@@ -137,6 +165,109 @@ public class SysKbServiceImpl extends ServiceImpl<SysKbMapper, SysKb> implements
         }
         //删除知识库
         sysKbMapper.deleteById(kbId);
+    }
+
+
+    @Override
+    public void previewFile(String fileId, HttpServletResponse response, HttpServletRequest request) throws Exception {
+        //根据fileId,获取文件详情
+        SysFile sysFile = sysFileMapper.selectById(fileId);
+        //从minio将要预览的文件下载到本地
+        MinioClient client = minioFileUtil.client();
+        minioFileUtil.downloadPath(urlLocal, bucketName, sysFile.getObjectKey(), sysFile.getName());
+        //预览文件
+        try {
+            log.info("开始预览");
+            // response.setCharacterEncoding("utf-8");
+            // response.setContentType("application/octet-stream");
+
+            // 读文件输入流
+            String filePath = urlLocal + sysFile.getName();
+            InputStream inputStream = new FileInputStream(filePath);
+
+            // 复制文件流
+            StreamUtils.copy(inputStream, response.getOutputStream());
+
+            // 关闭输入流
+            inputStream.close();
+
+            log.info("预览结束");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 保存修改后的文件
+     *
+     * @param response
+     * @param request
+     * @param name     修改文件的本地路径
+     */
+    @Override
+    public void saveFile(HttpServletResponse response, HttpServletRequest request, String name) {
+
+        try {
+            // 获得response信息
+            // PrintWriter writer = response.getWriter();
+
+            // 获取数据文件信息
+            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+            StreamUtils.copy(request.getInputStream(), byteArrayOutputStream);
+            String fileInfoStr = byteArrayOutputStream.toString();
+            byteArrayOutputStream.close();
+
+            // if (fileInfoStr.isEmpty()) {
+            //     writer.write("request的输入流为空");
+            //     return;
+            // }
+
+            System.out.println(fileInfoStr);
+
+            // 转化字符串对象转化为JSON对象
+            JSONObject fileInfoObj = JSON.parseObject(fileInfoStr);
+
+            // 获取编辑文件的状态
 
+            int status = (Integer) fileInfoObj.get("status");
+            int saved = 0;
+
+            // 关闭正在编辑的文档10秒钟后,会收到该消息
+            if (status == 2 || status == 3) {
+                // 获取文件数据
+                try {
+                    URL url = new URL((String) fileInfoObj.get("url"));
+                    java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
+                    InputStream inputStream = connection.getInputStream();
+
+                    if (inputStream == null) {
+                        throw new Exception("Stream is null");
+                    }
+
+                    // 保存编辑后的数据
+                    String path = urlLocal + name;
+                    File file = new File(path);
+
+                    // 复制数据流
+                    FileOutputStream outputStream = new FileOutputStream(file);
+                    StreamUtils.copy(inputStream, outputStream);
+
+                    // 关闭数据资源
+                    outputStream.close();
+                    inputStream.close();
+                    connection.disconnect();
+                } catch (Exception ex) {
+                    saved = 1;
+                    ex.printStackTrace();
+                }
+                System.out.println("保存文件成功");
+            }
+
+
+            // writer.write("{\"error\":" + saved + "}");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
     }
 }

+ 7 - 7
src/main/resources/application-formal.yml

@@ -18,11 +18,11 @@ minio:
 #  #Secret key密码
 #  secretKey: ZfmZgtZO4g1L8iMmVB8DeARCSdyxzI8G
 
-  url: http://192.168.1.203:9000
+  url: http://172.23.11.26:9000
   #Access key账户
-  accessKey: itSjNISOAdySd5HBUsTB
+  accessKey: fG2cm5LfIo41mXUqfYKt
   #Secret key密码
-  secretKey: OCl5JWqS8HyDkE8l1kFLs2zMub13vVBCcfdQ7fv6
+  secretKey: mrCeT8morgZVD0EMxnxtxTa2P2VYG4lqfUjWxuds
   bucketName: default
 spring:
   datasource:
@@ -36,24 +36,24 @@ spring:
 #          password: 123456
 #          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
         master:
-          url: jdbc:mysql://192.168.1.203:3310/slim
+          url: jdbc:mysql://172.23.11.26:3310/slim
           username: root
           password: 123
           driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
         slave_1:
-          url: jdbc:mysql://192.168.1.203:3311/slim
+          url: jdbc:mysql://172.23.11.26:3311/slim
           username: root
           password: 123
           driver-class-name: com.mysql.cj.jdbc.Driver
         slave_2:
-          url: jdbc:mysql://192.168.1.203:3312/slim
+          url: jdbc:mysql://172.23.11.26:3312/slim
           username: root
           password: 123
           driver-class-name: com.mysql.cj.jdbc.Driver
   # redis 配置
   redis:
 #    # 地址
-    host: 192.168.1.203
+    host: 172.23.11.26
 #    # 端口,默认为6379
     port: 6378
 # feign 配置

+ 12 - 8
src/main/resources/application-local.yml

@@ -3,7 +3,7 @@ server:
 # 通用配置
 pavis:
   # 需要换成自己开发环境本地的地址
-  profile: D:\privacy\pavis\uploadPath
+  profile: D:\privacy\pavis\uploadPath\
 #minio配置
 minio:
 #  #对象存储服务的URL
@@ -18,11 +18,15 @@ minio:
 #  #Secret key密码
 #  secretKey: ZfmZgtZO4g1L8iMmVB8DeARCSdyxzI8G
 
-  url: http://192.168.1.170:9000/
+  url: http://192.168.1.141:9000/
+#  #Access key账户
+#  accessKey: upHc9rOpkgBknGOmR9jt
+#  #Secret key密码
+#  secretKey: UAlOMz7KeihAStEimUoFo8h13xmO9ITXFqWDEXFn
   #Access key账户
-  accessKey: upHc9rOpkgBknGOmR9jt
+  accessKey: 5ZZeUZoJ3kDZBDlU5lzV
   #Secret key密码
-  secretKey: UAlOMz7KeihAStEimUoFo8h13xmO9ITXFqWDEXFn
+  secretKey: AhWx4oHT37xaHc8S2bWyWnn9KPVQVGlprGVGG62y
   bucketName: default
 spring:
   datasource:
@@ -36,24 +40,24 @@ spring:
 #          password: 123456
 #          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
         master:
-          url: jdbc:mysql://192.168.1.170:3310/slim
+          url: jdbc:mysql://192.168.1.141:3310/slim
           username: root
           password: Gky.i3g8,
           driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
         slave_1:
-          url: jdbc:mysql://192.168.1.170:3311/slim
+          url: jdbc:mysql://192.168.1.141:3311/slim
           username: root
           password: Gky.i3g8,
           driver-class-name: com.mysql.cj.jdbc.Driver
         slave_2:
-          url: jdbc:mysql://192.168.1.170:3312/slim
+          url: jdbc:mysql://192.168.1.141:3312/slim
           username: root
           password: Gky.i3g8,
           driver-class-name: com.mysql.cj.jdbc.Driver
   # redis 配置
   redis:
 #    # 地址
-    host: 192.168.1.170
+    host: 192.168.1.141
 #    # 端口,默认为6379
     port: 6379
 # feign 配置

BIN
test.docx