Browse Source

os文件管理 兼容本地文件上传

wanggaokun 1 year ago
parent
commit
76f43d9d17

+ 21 - 4
taais-admin/src/main/java/com/taais/web/controller/common/CommonController.java

@@ -7,6 +7,9 @@ import com.taais.common.core.utils.StringUtils;
 import com.taais.common.core.utils.file.FileUploadUtils;
 import com.taais.common.core.utils.file.FileUtils;
 import com.taais.system.config.ServerConfig;
+import com.taais.system.domain.vo.SysOssUploadVo;
+import com.taais.system.domain.vo.SysOssVo;
+import com.taais.system.service.ISysOssService;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import org.slf4j.Logger;
@@ -36,6 +39,11 @@ public class CommonController {
     private static final String FILE_DELIMETER = ",";
     @Autowired
     private ServerConfig serverConfig;
+    private final ISysOssService sysOssService;
+
+    public CommonController(ISysOssService sysOssService) {
+        this.sysOssService = sysOssService;
+    }
 
     /**
      * 通用下载请求
@@ -62,24 +70,33 @@ public class CommonController {
             log.error("下载文件失败", e);
         }
     }
-
     /**
      * 通用上传请求(单个)
      */
     @PostMapping("/upload")
-    public CommonResult<Map<String, Object>> uploadFile(MultipartFile file) throws Exception {
+    public CommonResult<SysOssUploadVo> uploadFile(MultipartFile file) throws Exception {
         try {
+
             // 上传文件路径
             String filePath = TaaisConfig.getUploadPath();
             // 上传并返回新文件名称
             String fileName = FileUploadUtils.upload(filePath, file);
             String url = serverConfig.getUrl() + fileName;
+            String  originalFilename = file.getOriginalFilename();
             Map<String, Object> map = new HashMap<>();
             map.put("url", url);
             map.put("fileName", fileName);
             map.put("newFileName", FileUtils.getName(fileName));
-            map.put("originalFilename", file.getOriginalFilename());
-            return CommonResult.success(map);
+            map.put("originalFilename", originalFilename);
+            assert originalFilename != null;
+            String suffix = StringUtils.substring(originalFilename, originalFilename.lastIndexOf("."), originalFilename.length());
+            // 信息保存在文件管理
+            SysOssVo oss = sysOssService.saveResultEntity(file.getOriginalFilename(),suffix, url,fileName);
+            SysOssUploadVo uploadVo = new SysOssUploadVo();
+            uploadVo.setUrl(oss.getUrl());
+            uploadVo.setFileName(oss.getOriginalName());
+            uploadVo.setOssId(oss.getOssId().toString());
+            return CommonResult.success(uploadVo);
         } catch (Exception e) {
             return CommonResult.fail(e.getMessage());
         }

+ 4 - 0
taais-common/taais-common-web/src/main/java/com/taais/common/web/config/ResourcesConfig.java

@@ -1,5 +1,7 @@
 package com.taais.common.web.config;
 
+import com.taais.common.core.config.TaaisConfig;
+import com.taais.common.core.constant.Constants;
 import com.taais.common.web.interceptor.FlexWebInvokeTimeInterceptor;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.Bean;
@@ -26,6 +28,8 @@ public class ResourcesConfig implements WebMvcConfigurer {
 
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
+            .addResourceLocations("file:" + TaaisConfig.getProfile() + "/");
     }
 
     /**

+ 2 - 2
taais-modules/taais-generator/src/main/java/com/taais/generator/util/VelocityUtils.java

@@ -144,7 +144,7 @@ public class VelocityUtils {
         } else {
             templates.add("vm/sql/mysql/sql.vm");
         }
-        templates.add("vm/js/api.ts.vm");
+        templates.add("vm/api/api.ts.vm");
         if (GenConstants.TPL_CRUD.equals(tplCategory)) {
             templates.add("vm/vue/index.vue.vm");
         } else if (GenConstants.TPL_TREE.equals(tplCategory)) {
@@ -198,7 +198,7 @@ public class VelocityUtils {
                 fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, genTable.getSubTable().getClassName());
             case "vm/sql/postgresql/sql.vm" -> fileName = businessName + "Menu(postgresql).sql";
             case "vm/sql/mysql/sql.vm" -> fileName = businessName + "Menu(mysql).sql";
-            case "vm/js/api.ts.vm" ->
+            case "vm/api/api.ts.vm" ->
                 fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName);
             case "vm/vue/index.vue.vm" ->
                 fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);

+ 0 - 0
taais-modules/taais-generator/src/main/resources/vm/js/api.ts.vm → taais-modules/taais-generator/src/main/resources/vm/api/api.ts.vm


+ 3 - 0
taais-modules/taais-system/src/main/java/com/taais/system/service/ISysOssService.java

@@ -34,4 +34,7 @@ public interface ISysOssService extends IBaseService<SysOss> {
 
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
+    SysOssVo saveResultEntity(String originalFileName, String suffix, String url, String fileName);
+
+
 }

+ 34 - 4
taais-modules/taais-system/src/main/java/com/taais/system/service/impl/SysOssServiceImpl.java

@@ -1,9 +1,13 @@
 package com.taais.system.service.impl;
 
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.taais.common.core.config.TaaisConfig;
 import com.taais.common.core.constant.CacheNames;
+import com.taais.common.core.constant.Constants;
 import com.taais.common.core.core.page.PageResult;
 import com.taais.common.core.exception.ServiceException;
 import com.taais.common.core.service.OssService;
@@ -60,7 +64,7 @@ public class SysOssServiceImpl extends BaseServiceImpl<SysOssMapper, SysOss> imp
     }
 
     private QueryWrapper buildQueryWrapper(SysOssBo bo) {
-        QueryWrapper queryWrapper = super.buildBaseQueryWrapper()
+        return super.buildBaseQueryWrapper()
             .where(SYS_OSS.FILE_NAME.like(bo.getFileName()))
             .and(SYS_OSS.ORIGINAL_NAME.like(bo.getOriginalName()))
             .and(SYS_OSS.FILE_SUFFIX.eq(bo.getFileSuffix()))
@@ -68,7 +72,6 @@ public class SysOssServiceImpl extends BaseServiceImpl<SysOssMapper, SysOss> imp
             .and(SYS_OSS.CREATE_TIME.between(bo.getParams().get("beginCreateTime"), bo.getParams().get("endCreateTime")))
             .and(SYS_OSS.SERVICE.eq(bo.getService()))
             .orderBy(SYS_OSS.OSS_ID.asc());
-        return queryWrapper;
     }
 
     @Override
@@ -185,8 +188,17 @@ public class SysOssServiceImpl extends BaseServiceImpl<SysOssMapper, SysOss> imp
 
         List<SysOss> list = this.listByIds(ids);
         for (SysOss sysOss : list) {
-            OssClient storage = OssFactory.instance(sysOss.getService());
-            storage.delete(sysOss.getUrl());
+            if (StrUtil.equals("Local",sysOss.getService())) {
+                // 删除本地文件
+                String filePath = TaaisConfig.getProfile() + StringUtils.substringAfter(sysOss.getFileName(), Constants.RESOURCE_PREFIX);
+                boolean deleted = FileUtil.del(filePath);
+                if (!deleted) {
+                    throw new ServiceException(sysOss.getFileName()+ "文件删除失败,可能是因为文件不存在或无权限删除。");
+                }
+            } else {
+                OssClient storage = OssFactory.instance(sysOss.getService());
+                storage.delete(sysOss.getUrl());
+            }
         }
         return this.removeByIds(ids);
     }
@@ -198,6 +210,9 @@ public class SysOssServiceImpl extends BaseServiceImpl<SysOssMapper, SysOss> imp
      * @return oss 匹配Url的OSS对象
      */
     private SysOssVo matchingUrl(SysOssVo oss) {
+        if (StrUtil.equals("Local",oss.getService())){
+            return oss;
+        }
         OssClient storage = OssFactory.instance(oss.getService());
         // 仅修改桶类型为 private 的URL,临时URL时长为120s
         if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
@@ -205,4 +220,19 @@ public class SysOssServiceImpl extends BaseServiceImpl<SysOssMapper, SysOss> imp
         }
         return oss;
     }
+
+
+    @Override
+    public SysOssVo saveResultEntity(String originalFileName, String suffix, String url, String fileName) {
+        SysOss oss = new SysOss();
+        oss.setUrl(url);
+        oss.setFileSuffix(suffix);
+        oss.setFileName(fileName);
+        oss.setOriginalName(originalFileName);
+        oss.setService("Local");
+        this.save(oss);
+        SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
+        assert sysOssVo != null;
+        return sysOssVo;
+    }
 }