tsurumure 8 månader sedan
förälder
incheckning
46e7f349e2

+ 1 - 3
db/sys_upload.sql

@@ -10,8 +10,7 @@ CREATE TABLE `sys_upload` (
     `id` BIGINT(10) AUTO_INCREMENT COMMENT 'ID',
     `category_id` BIGINT(10) COMMENT '分类ID',
     `user_id` BIGINT(10) COMMENT '上传用户ID',
-    `file_name` VARCHAR(255) NOT NULL COMMENT '文件名称',
-    `file_type` VARCHAR(500) COMMENT '文件类型',
+    `name` VARCHAR(255) NOT NULL COMMENT '文件名称',
     `full_path` VARCHAR(1000) COMMENT '文件完整路径',
     `object_key` VARCHAR(500) COMMENT 'ObjectKey',
     `size` INT COMMENT '文件大小',
@@ -19,4 +18,3 @@ CREATE TABLE `sys_upload` (
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统上传文件表';
-

+ 9 - 8
src/main/java/com/backendsys/controller/Upload/UploadTencentCOSController.java

@@ -52,14 +52,15 @@ public class UploadTencentCOSController {
     private SDKTencentCOSService sdkTencentCOSService;
 
 
-    /**
-     * 权限:待定
-     * 获得临时上传密钥 (用于前端单文件上传、分片上传)
-     */
-    @GetMapping("/api/upload/getTempCredentials")
-    public Result getTempCredentials() {
-        return Result.success(sdkTencentCOSService.getTempCredentials("*"));
-    }
+//    /**
+//     * 权限:待定
+//     * 获得临时上传密钥 (用于前端单文件上传、分片上传)
+//     */
+//    @GetMapping("/api/upload/getTempCredentials")
+//    public Result getTempCredentials() {
+//        return Result.success(sdkTencentCOSService.getTempCredentials("*"));
+//    }
+
 
 //    /**
 //     * 权限:待定

+ 1 - 1
src/main/java/com/backendsys/modules/log/controller/LogStreamController.java

@@ -99,7 +99,7 @@ public class LogStreamController {
     @GetMapping("/api/log/stream/send")
     public String send() {
         String message = "{\"message\": \"Hello World 中文\"}";
-        sseUtil.send(message);
+        sseUtil.send(1L, message);
         return "success";
     }
 

+ 10 - 0
src/main/java/com/backendsys/modules/sdk/tencent/cos/entity/Progress.java

@@ -0,0 +1,10 @@
+package com.backendsys.modules.sdk.tencent.cos.entity;
+
+import lombok.Data;
+
+@Data
+public class Progress {
+    private Long current;
+    private Long total;
+    private Double percent;
+}

+ 3 - 0
src/main/java/com/backendsys/modules/sdk/tencent/cos/service/TencentCosService.java

@@ -5,10 +5,13 @@ import com.qcloud.cos.model.UploadResult;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.net.URL;
 
 public interface TencentCosService {
 
     // [腾讯云COS] 上传对象
     UploadResult putObject(MultipartFile file, String object_key) throws IOException;
 
+    // [腾讯云COS] 获得临时图片地址
+    URL generateUrl(String object_key, Integer minutes);
 }

+ 69 - 72
src/main/java/com/backendsys/modules/sdk/tencent/cos/service/impl/TencentCosServiceImpl.java

@@ -7,13 +7,19 @@ import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
 import com.backendsys.entity.System.SysFile.SysFileDTO;
 import com.backendsys.entity.Tencent.TencentCos.MultipartUploadRespDTO;
 import com.backendsys.exception.CustException;
+import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
+import com.backendsys.modules.sdk.tencent.cos.entity.Progress;
 import com.backendsys.modules.sdk.tencent.cos.service.TencentCosService;
 import com.backendsys.modules.sdk.tencent.cos.utils.TencentCosUtil;
+import com.backendsys.modules.sse.utils.SseUtil;
 import com.backendsys.utils.CommonUtil;
 import com.qcloud.cos.COSClient;
 import com.qcloud.cos.ClientConfig;
 import com.qcloud.cos.auth.BasicCOSCredentials;
 import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.http.HttpMethodName;
+import com.qcloud.cos.model.GeneratePresignedUrlRequest;
+import com.qcloud.cos.model.ObjectMetadata;
 import com.qcloud.cos.model.PutObjectRequest;
 import com.qcloud.cos.model.UploadResult;
 import com.qcloud.cos.region.Region;
@@ -23,22 +29,30 @@ import com.qcloud.cos.transfer.TransferProgress;
 import com.qcloud.cos.transfer.Upload;
 import com.qcloud.cos.utils.IOUtils;
 import net.coobird.thumbnailator.Thumbnails;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
 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.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
+import java.net.URL;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import static org.aspectj.weaver.tools.cache.SimpleCacheFactory.path;
+
 @Service
 public class TencentCosServiceImpl implements TencentCosService {
 
+    @Autowired
+    private HttpRequestUtil httpRequestUtil;
+    @Autowired
+    private SseUtil sseUtil;
+
     @Value("${tencent.cos.max-size}")
     private long MAX_SIZE;
     @Value("${tencent.cos.region}")
@@ -61,40 +75,66 @@ public class TencentCosServiceImpl implements TencentCosService {
         return cosClient;
     }
 
+    // [腾讯云COS][高级接口] 获取进度函数
+    private void showTransferProgress(String md5, Transfer transfer) {
+        // 这里的 Transfer 是异步上传结果 Upload 的父类
+        System.out.println(transfer.getDescription());
+        // 查询上传是否已经完成
+        while (transfer.isDone() == false) {
+
+            // 每秒获取一次进度
+            try { Thread.sleep(1000); } catch (InterruptedException e) { return; }
+
+            TransferProgress transferProgress = transfer.getProgress();
+            long current = transferProgress.getBytesTransferred();
+            long total = transferProgress.getTotalBytesToTransfer();
+            double percent = transferProgress.getPercentTransferred();
+            System.out.printf("upload Progress: [%d / %d] = %.02f%%\n", current, total, percent);
+
+            Progress progress = new Progress();
+            progress.setCurrent(current);
+            progress.setTotal(total);
+            progress.setPercent(percent);
+            sseUtil.send(httpRequestUtil.getUserId(), progress);
+
+        }
+        // 完成了 Completed,或者失败了 Failed
+        System.out.println(transfer.getState());
+        sseUtil.send(httpRequestUtil.getUserId(), transfer.getState());
+    }
+
     // [腾讯云COS] 上传对象
     @Override
-    public UploadResult putObject(MultipartFile file, String object_key) {
+    public UploadResult putObject(MultipartFile multipartFile, String object_key) {
 
-        if (file.isEmpty()) throw new CustException("file 上传文件不能为空");
+        if (multipartFile.isEmpty()) throw new CustException("file 上传文件不能为空");
 
         COSClient cosClient = getClient();
         try {
 
-            InputStream inputStream = file.getInputStream();
-
-            // 将文件内容写入临时文件
-            String tempFilename = CommonUtil.generateFilename(null);
-            File tempFile = File.createTempFile(tempFilename, null);
-            try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
-                IOUtils.copy(inputStream, outputStream);
-            }
-
             // 如果不传 object_key,则默认使用临时文件夹 (/temp) + MD5文件名
+            String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
             if (StrUtil.isEmpty(object_key)) {
-                String md5 = DigestUtil.md5Hex(file.getInputStream());
-                String suffix = FileUtil.extName(file.getOriginalFilename()).toLowerCase();
+                String suffix = FileUtil.extName(multipartFile.getOriginalFilename()).toLowerCase();
                 String filename = md5 + "." + suffix;
                 object_key = "temp/" + filename;
             }
 
+            URL url = generateUrl(object_key, 15);
+            System.out.println("url = " + url);
+
             // 创建 PutObjectRequest 对象,PutObject 请求。(异步)
-            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, object_key, tempFile);
-//            cosClient.putObject(putObjectRequest);   // 普通上传 (没有进度)
+            ObjectMetadata metadata = new ObjectMetadata();
+            metadata.setContentLength(multipartFile.getSize());
+            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, object_key, multipartFile.getInputStream(), metadata);
+
+            // 普通上传 (没有进度)
+//            cosClient.putObject(putObjectRequest);
 
             // 高级上传
             TransferManager transferManager = TencentCosUtil.createTransferManager(cosClient);
             Upload upload = transferManager.upload(putObjectRequest);   // 返回一个异步结果Upload
-            TencentCosUtil.showTransferProgress(upload);                // 打印上传进度,直到上传结束
+            showTransferProgress(md5, upload);                          // 查询上传进度,直到上传结束
             UploadResult uploadResult = upload.waitForUploadResult();   // 捕获可能出现的异常
             return uploadResult;
 
@@ -106,34 +146,17 @@ public class TencentCosServiceImpl implements TencentCosService {
             if (cosClient != null) cosClient.shutdown();
         }
 
-//
-//        MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
-//        try {
-//
-//            String md5 = DigestUtil.md5Hex(file.getInputStream());
-//            String suffix = FileUtil.extName(file.getOriginalFilename()).toLowerCase();
-//            String filename = md5 + "." + suffix;
-//            String filenameThumb = filename.replaceAll("." + suffix, "-thumb." + suffix);
-//            String key = "temp/" + filename;
-//            String keyThumb = "temp/" + filenameThumb;
-//            String remotePath = accessibleDomain + "/" + key;
-//            String remotePathThumb = accessibleDomain + "/" + keyThumb;
-//
 //            // 获得文件分类列表
 //            SysFileCategoryDTO categoryDTO = new SysFileCategoryDTO();
 //            List<SysFileCategoryDTO> categoryList = sysFileCategoryMapper.queryFileCategoryList(categoryDTO);
 //
 //            // 获得图片分类的后缀 (待做),再进行以下判断
-//
 //            // 还有删除也要同时删除缩略图
-//
 //            // 还有大文件分片也要做缩略图
-//
 //            // 还有 视频要做截图生成
 //
 //            boolean isImage = Arrays.asList("jpg", "jpeg", "png", "gif", "bmp", "tiff", "webp").contains(suffix.toLowerCase());
 //
-//
 //            // 检查对象是否存在于存储桶中
 //            if (checkObjectExist(cosClient, key)) {
 //                // -- [COS] 对象存在时,直接返回路径 -------------------------------
@@ -170,42 +193,16 @@ public class TencentCosServiceImpl implements TencentCosService {
 //                tempFile.delete();
 //
 //            }
-//
-//            // -- [DB] 查询数据 ---------------------------------------------
-//            SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
-//            // 如果表中没有数据,则添加数据
-//            if (fileDetail == null) {
-//                // -- [DB] 插入数据 -----------------------------------------
-//                SysFileDTO fileDTO = new SysFileDTO();
-//                fileDTO.setUser_id(httpRequestAspect.getUserId());
-//                fileDTO.setName(filename);
-//                fileDTO.setFile_key(key);
-//                fileDTO.setFile_remote_path(remotePath);
-//                if (isImage) {
-//                    fileDTO.setFile_remote_path_thumb(remotePathThumb);
-//                }
-//                fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
-//                fileDTO.setSize(file.getSize());
-//                fileDTO.setMd5(md5);
-//                sysFileMapper.insertFile(fileDTO);
-//            }
-//            // -------------------------------------------------------------
-//
-//            resp.setFilename(filename);
-//            resp.setKey(key);
-//            resp.setMd5(md5);
-//            resp.setSize(file.getSize());
-//            resp.setPath(remotePath);
-//
-//        } catch (IOException e) {
-//            throw new CustException(e.getMessage());
-//        } finally {
-//            if (cosClient != null) {
-//                cosClient.shutdown();
-//            }
-//        }
-//        return resp;
 
     }
 
+    @Override
+    public URL generateUrl(String object_key, Integer minutes) {
+        // 生成临时访问的URL (15分钟)
+        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(BUCKET_NAME, object_key, HttpMethodName.GET);
+        Date expirationDate = new DateTime().plusMinutes(minutes).toDate();
+        request.setExpiration(expirationDate);
+        URL url = getClient().generatePresignedUrl(request);
+        return url;
+    }
 }

+ 18 - 22
src/main/java/com/backendsys/modules/sdk/tencent/cos/utils/TencentCosUtil.java

@@ -1,10 +1,13 @@
 package com.backendsys.modules.sdk.tencent.cos.utils;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IORuntimeException;
 import com.qcloud.cos.COSClient;
-import com.qcloud.cos.transfer.Transfer;
 import com.qcloud.cos.transfer.TransferManager;
-import com.qcloud.cos.transfer.TransferProgress;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -19,28 +22,21 @@ public class TencentCosUtil {
         return new TransferManager(cosClient, threadPool);
     }
 
-
-    // [腾讯云COS][高级接口] 获取进度函数
-    public static void showTransferProgress(Transfer transfer) {
-        // 这里的 Transfer 是异步上传结果 Upload 的父类
-        System.out.println(transfer.getDescription());
-        // 查询上传是否已经完成
-        while (transfer.isDone() == false) {
-            try {
-                // 每 2 秒获取一次进度
-                Thread.sleep(2000);
-            } catch (InterruptedException e) {
-                return;
-            }
-            TransferProgress progress = transfer.getProgress();
-            long sofar = progress.getBytesTransferred();
-            long total = progress.getTotalBytesToTransfer();
-            double pct = progress.getPercentTransferred();
-            System.out.printf("upload progress: [%d / %d] = %.02f%%\n", sofar, total, pct);
+    // [工具类] 转换为 File
+    public static File toFile(MultipartFile multipartFile) {
+        File file = null;
+        try {
+            file = FileUtil.createTempFile();
+            FileUtil.writeFromStream(multipartFile.getInputStream(), file);
+            file.deleteOnExit();
+        } catch (IORuntimeException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
-        // 完成了 Completed,或者失败了 Failed
-        System.out.println(transfer.getState());
+        return file;
     }
 
 
+
 }

+ 1 - 1
src/main/java/com/backendsys/modules/sse/controller/SseController.java

@@ -48,7 +48,7 @@ public class SseController {
     @GetMapping("/api/sse/send")
     public String send() {
         String message = "{\"message\": \"Hello World\"}";
-        sseUtil.send(message);
+        sseUtil.send(1L, message);
         return "success";
     }
 

+ 2 - 4
src/main/java/com/backendsys/modules/sse/utils/SseUtil.java

@@ -1,8 +1,8 @@
 package com.backendsys.modules.sse.utils;
 
 import cn.hutool.core.convert.Convert;
+import cn.hutool.json.JSONUtil;
 import com.backendsys.modules.sse.emitter.SseEmitterManager;
-import org.springframework.http.MediaType;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
@@ -12,13 +12,11 @@ import java.io.IOException;
 public class SseUtil {
 
     // [SSE] 发送消息
-    public void send(String data) {
-        Long userId = 1L;
+    public void send(Long userId, Object data) {
         SseEmitterManager manager = SseEmitterManager.getInstance();
         SseEmitterUTF8 emitter = manager.getEmitter(Convert.toStr(userId));
         if (emitter != null) {
             try {
-//                emitter.send(SseEmitter.event().data(data));
                 emitter.send(SseEmitter.event().data(data));
             } catch (IOException e) {
                 System.out.println(e.getMessage());

+ 45 - 9
src/main/java/com/backendsys/modules/upload/controller/SysUploadController.java

@@ -1,16 +1,23 @@
 package com.backendsys.modules.upload.controller;
 
+import cn.hutool.core.convert.Convert;
 import com.backendsys.exception.CustException;
+import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.sdk.tencent.cos.service.TencentCosService;
+import com.backendsys.modules.sse.emitter.SseEmitterManager;
+import com.backendsys.modules.sse.utils.SseEmitterUTF8;
+import com.backendsys.modules.sse.utils.SseUtil;
 import com.backendsys.modules.upload.service.SysUploadService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 import java.io.IOException;
 
@@ -19,23 +26,52 @@ import java.io.IOException;
 public class SysUploadController {
 
     @Autowired
-    private TencentCosService tencentCosService;
+    private SseUtil sseUtil;
+    @Autowired
+    private HttpRequestUtil httpRequestUtil;
     @Autowired
     private SysUploadService sysUploadService;
 
     /**
      * 简单上传文件 (小文件,20MB以内)
-     * - 5MB = 5242880
-     * - 20MB = 20971520
-     * - 100MB = 104857600
-     * - 1GB = 1073741824
      */
     @PreAuthorize("@ss.hasPermi(1.1)")
     @PostMapping("/api/v2/upload/simpleUpload")
-    public Result uploadSmall(@RequestParam("file") MultipartFile file) {
-//    public Result uploadSmall(@RequestParam("file") MultipartFile file) throws IOException {
-        return Result.success().put("data", sysUploadService.uploadSmall(file));
-//        return Result.success().put("data", tencentCosService.putObject(file, null));
+    public Result uploadSmall(@RequestParam("file") MultipartFile multipartFile) {
+        return Result.success().put("data", sysUploadService.uploadSmall(multipartFile));
+    }
+
+    /**
+     * [SSE] 消息监听 (上传进度)
+     */
+    @GetMapping(value = "/api/sse/stream/upload", produces = "text/event-stream;charset=UTF-8")
+    public SseEmitter streamUpload() {
+        String userId = Convert.toStr(httpRequestUtil.getUserId());
+        SseEmitterUTF8 emitter = new SseEmitterUTF8(Long.MAX_VALUE);
+        SseEmitterManager manager = SseEmitterManager.getInstance();
+        manager.addEmitter(userId, emitter);
+        try {
+            // 创建新连接
+            manager.addEmitter(userId, emitter);
+            emitter.send(SseEmitter.event().data("Connected successfully! (连接成功)"));
+        } catch (IOException e) {
+            // 关闭连接
+            // emitter.complete();
+            manager.emitters.remove(emitter);
+            // 如果存在,则关闭
+            sseUtil.closeIfExist(userId);
+        }
+        return emitter;
+    }
+
+    /**
+     * [SSE] 测试发送
+     */
+    @GetMapping("/api/v2/sse/send")
+    public String send() {
+        String message = "{\"message\": \"Hello World\"}";
+        sseUtil.send(httpRequestUtil.getUserId(), message);
+        return "success";
     }
 
 }

+ 1 - 2
src/main/java/com/backendsys/modules/upload/entity/SysUpload.java

@@ -12,8 +12,7 @@ public class SysUpload {
     private Long id;
     private Long category_id;
     private Long user_id;
-    private String file_name;
-    private String file_type;
+    private String name;
     private String full_path;
     private String object_key;
     private Long size;

+ 30 - 17
src/main/java/com/backendsys/modules/upload/service/impl/SysUploadServiceImpl.java

@@ -1,13 +1,17 @@
 package com.backendsys.modules.upload.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.file.FileNameUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.sdk.tencent.cos.service.TencentCosService;
 import com.backendsys.modules.upload.dao.SysUploadDao;
 import com.backendsys.modules.upload.entity.SysUpload;
 import com.backendsys.modules.upload.service.SysUploadService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qcloud.cos.model.UploadResult;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -23,6 +27,9 @@ public class SysUploadServiceImpl implements SysUploadService {
     @Autowired
     private SysUploadDao sysUploadDao;
 
+    @Value("${tencent.cos.accessible-domain}")
+    private String ACCESSIBLE_DOMAIN;
+
     /**
      * [上传] 小文件
      * - 5MB = 5242880
@@ -31,30 +38,36 @@ public class SysUploadServiceImpl implements SysUploadService {
      * - 1GB = 1073741824
      */
     @Override
-    public SysUpload uploadSmall(MultipartFile file) {
+    public SysUpload uploadSmall(MultipartFile multipartFile) {
         try {
 
             // 判断文件是否超过大小
-            long MAX_SIZE = 5242880;
-            if (file.getSize() > MAX_SIZE) {
+            long MAX_SIZE = 20971520;
+            if (multipartFile.getSize() > MAX_SIZE) {
                 throw new CustException("上传文件不能大于 " + MAX_SIZE / 1024 / 1024 + " MB,请使用大文件上传功能");
             }
 
-            UploadResult uploadResult = tencentCosService.putObject(file, null);
-
-            // 新增上传文件记录
-            SysUpload sysUpload = new SysUpload();
-//            sysUpload.setCategory_id(null);   // 临时分类?
-            sysUpload.setUser_id(httpRequestUtil.getUserId());
-            // 封装 getFileName
-            // 封装 getFileType
-            // 封装 getFullPath
-//            sysUpload.setFile_name(uploadResult.getKey().replace("/temp", ""));
-            sysUpload.setObject_key(uploadResult.getKey());
-            sysUpload.setSize(file.getSize());
-            sysUpload.setMd5(uploadResult.getETag());
+            UploadResult uploadResult = tencentCosService.putObject(multipartFile, null);
 
-            return sysUpload;
+            SysUpload sysUploadEntity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getMd5, uploadResult.getETag()));
+            if (sysUploadEntity == null) {
+                // [新增] 上传文件记录
+                sysUploadEntity = new SysUpload();
+                sysUploadEntity.setUser_id(httpRequestUtil.getUserId());
+                sysUploadEntity.setObject_key(uploadResult.getKey());
+                sysUploadEntity.setName(FileNameUtil.getName(uploadResult.getKey()));
+                sysUploadEntity.setFull_path(ACCESSIBLE_DOMAIN + "/" + uploadResult.getKey());
+                sysUploadEntity.setSize(multipartFile.getSize());
+                sysUploadEntity.setMd5(uploadResult.getETag());
+                sysUploadDao.insert(sysUploadEntity);
+                sysUploadEntity.setCreate_time(DateUtil.now());
+                sysUploadEntity.setUpdate_time(DateUtil.now());
+            } else {
+                // [更新] 上传文件记录
+                sysUploadEntity.setUpdate_time(DateUtil.now());
+                sysUploadDao.updateById(sysUploadEntity);
+            }
+            return sysUploadEntity;
 
         } catch (IOException e) {
             throw new RuntimeException(e);

+ 0 - 2
src/main/resources/application-local.yml

@@ -116,12 +116,10 @@ tencent:
     secret-id-temp: AKIDVuCIAoKiuzyqV1hIo8HEJtKcm8NWXkx4
     secret-key-temp: 763nQwV0JPQDsLYeeaWL4atMhvynaGjy
     # ------------------------------------------------------
-
     region: ap-hongkong
     bucket-name: storage-1320301544
     # accessible-domain: https://storage-1320301544.cos.ap-hongkong.myqcloud.com
     accessible-domain: http://cos.daoguyujia.com
-
   ivh:
     empty-app-key: 283ca6dc9d4147debc60bf9fc3fbbe03         # 空数据账号 (我自己的子账号)
     empty-access-token: eea44503a2f64c119fb0acd2006dacb0

+ 0 - 1
src/main/resources/application-prod.yml

@@ -120,7 +120,6 @@ tencent:
     # ------------------------------------------------------
     region: ap-hongkong
     bucket-name: storage-1320301544
-
     # accessible-domain: https://storage-1320301544.cos.ap-hongkong.myqcloud.com
     accessible-domain: http://cos.daoguyujia.com
   ivh: