xucaiqin hace 1 mes
padre
commit
c477e91295

+ 23 - 0
sckw-modules-api/sckw-file-api/src/main/java/com/sckw/file/api/feign/FileApiService.java

@@ -0,0 +1,23 @@
+package com.sckw.file.api.feign;
+
+import com.sckw.core.web.response.HttpResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.multipart.MultipartFile;
+
+@FeignClient(name = "sckw-ng-file", contextId = "FileApiService")
+public interface FileApiService {
+
+    /**
+     * 上传文件
+     *
+     * @param file
+     * @return
+     */
+    @PostMapping(value = "/common/upload",produces =  MediaType.MULTIPART_FORM_DATA_VALUE)
+    HttpResult fileFeignUpload(@RequestPart("file") MultipartFile file);
+
+
+}

+ 28 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/controller/CommonController.java

@@ -0,0 +1,28 @@
+package com.sckw.file.controller;
+
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.file.service.FileInfoService;
+import jakarta.annotation.Resource;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+@RestController
+@RequestMapping("/common")
+public class CommonController {
+    @Resource
+    private FileInfoService fileInfoService;
+
+    /**
+     * 通用上传请求(单个)
+     */
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public BaseResult<Object> uploadFile(@RequestPart("file") MultipartFile file) {
+        return BaseResult.success(fileInfoService.uploadFile(file));
+    }
+
+
+}

+ 88 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/service/FileInfoService.java

@@ -0,0 +1,88 @@
+package com.sckw.file.service;
+
+import cn.hutool.core.io.file.FileNameUtil;
+import cn.hutool.core.util.StrUtil;
+import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.config.ProjectConfig;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.model.vo.FileInfoVO;
+import com.sckw.core.utils.FileUploadUtils;
+import com.sckw.core.utils.FileUtils;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.file.dao.KwsFileInfoDao;
+import com.sckw.file.model.kwfFileInfo;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author xucaiqin
+ * @date 2026-05-07 13:39:43
+ */
+@Service
+@Slf4j
+public class FileInfoService {
+    @Resource
+    private KwsFileInfoDao kwsFileInfoDao;
+    @Resource
+    private ProjectConfig projectConfig;
+
+    @Transactional(rollbackFor = Exception.class)
+    public Object uploadFile(MultipartFile file) {
+        boolean isEmpty = file.isEmpty();
+        if (isEmpty) {
+            throw new BusinessException("文件不能为空");
+        }
+        String filePath = projectConfig.getProfile();
+
+        String fileName, md5;
+        try {
+            fileName = FileUploadUtils.upload(filePath, file);
+            md5 = DigestUtils.md5Hex(file.getInputStream());
+        } catch (IOException e) {
+            log.error("文件上传异常 {}", e.getMessage());
+            throw new BusinessException(e.getMessage());
+        }
+
+        String oFileName = file.getOriginalFilename();
+        BigDecimal fileSize = FileUtils.getFileSize(file, StringConstant.KB);
+        kwfFileInfo fileInfo = new kwfFileInfo();
+        fileInfo.setId(new IdWorker(1).nextId());
+        fileInfo.setOriginalName(oFileName);
+        fileInfo.setFileSuffix(FilenameUtils.getExtension(oFileName));
+        fileInfo.setFileSize(StringUtils.isBlank(fileSize) ? new BigDecimal(NumberConstant.ZERO) : fileSize);
+        fileInfo.setType("LOCAL");
+        fileInfo.setFileName(FileNameUtil.getName(fileName));
+        fileInfo.setMd5(md5);
+        fileInfo.setFilePath(fileName);
+        fileInfo.setCreateTime(new Date());
+        fileInfo.setUpdateTime(new Date());
+        fileInfo.setStatus(0);
+        fileInfo.setDelFlag(0);
+        fileInfo.setCreateBy(LoginUserHolder.getUserId());
+        fileInfo.setUpdateBy(LoginUserHolder.getUserId());
+        kwsFileInfoDao.insert(fileInfo);
+
+        FileInfoVO fileInfoVO = new FileInfoVO();
+        fileInfoVO.setType(fileInfo.getType());
+        fileInfoVO.setFileOriginalName(fileInfo.getOriginalName());
+        fileInfoVO.setFileMd5(fileInfo.getMd5());
+        fileInfoVO.setFileName(fileInfo.getFileName());
+        fileInfoVO.setFileSuffix(fileInfo.getFileSuffix());
+        fileInfoVO.setFileSize(fileInfo.getFileSize());
+        fileInfoVO.setFilePath(fileName);
+        fileInfoVO.setFileAbsolutePath(StrUtil.removeSuffix(projectConfig.getDomain(), "/") + "/" + StrUtil.removePrefix(fileName, "/"));
+        return fileInfoVO;
+    }
+}

+ 3 - 0
sckw-modules/sckw-file/src/main/resources/bootstrap.yml

@@ -10,3 +10,6 @@ spring:
   main:
     allow-bean-definition-overriding: true
     allow-circular-references: true
+
+common:
+  profile: /www/wwwroot