diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/FileUtils.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/FileUtils.java index f3b2f7f..f3c4291 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/FileUtils.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/FileUtils.java @@ -1,5 +1,7 @@ package com.chushang.common.core.util; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.img.Img; import cn.hutool.core.io.FileUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.digest.MD5; @@ -9,15 +11,17 @@ import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.awt.image.BufferedImage; import java.io.*; import java.net.URLEncoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.util.List; public class FileUtils extends FileUtil { private static final Logger log = LoggerFactory.getLogger(FileUtils.class); @@ -269,5 +273,23 @@ public class FileUtils extends FileUtil { return IOUtils.toString(() -> Files.newInputStream(file.toPath()), Charsets.toCharset(charsetName)); } - +// /** +// * 添加水印 +// * +// * @param formats 水印名 +// * @param img 图片 +// */ + public static InputStream waterSeal(List formats, InputStream inputStream) { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + for (int i = 0; i < formats.size(); i++) { + Img.from(ImageIO.read(inputStream)).setPositionBaseCentre(true) + .pressText(formats.get(i), Color.red, new Font("微软雅黑", Font.BOLD, 45), 0, (i + 1) * 30, 0.8f) + .write(outputStream); + } + outputStream.flush(); + return new ByteArrayInputStream(outputStream.toByteArray()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java index d3032a4..525830a 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java @@ -228,7 +228,6 @@ public class IPUtils { log.debug("request.getRemoteAddr() ==>" + ip); } - log.info("RealRemoteIP ==>" + ip); return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } @@ -274,7 +273,6 @@ public class IPUtils { log.debug("request.getRemoteAddr() ==>" + ip); } - log.info("RealRemoteIP ==>" + ip); return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } diff --git a/chushang-modules/chushang-module-auth/auth-service/pom.xml b/chushang-modules/chushang-module-auth/auth-service/pom.xml index 5d3d547..573053f 100644 --- a/chushang-modules/chushang-module-auth/auth-service/pom.xml +++ b/chushang-modules/chushang-module-auth/auth-service/pom.xml @@ -51,11 +51,60 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + **/application.yml + **/bootstrap.yml + **/logback-nacos.xml + + + + true + + lib/ + + false + + com.chushang.AuthApplication + + + + ./config/ + + + ${project.build.directory} + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + org.springframework.boot spring-boot-maven-plugin + + ${project.build.finalName} + + true + + + + + + repackage + + + + ${project.artifactId} diff --git a/chushang-modules/chushang-module-gateway/pom.xml b/chushang-modules/chushang-module-gateway/pom.xml index 0f52a91..55300a1 100644 --- a/chushang-modules/chushang-module-gateway/pom.xml +++ b/chushang-modules/chushang-module-gateway/pom.xml @@ -76,11 +76,60 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + **/application.yml + **/bootstrap.yml + **/logback-nacos.xml + + + + true + + lib/ + + false + + com.chushang.GatewayApplication + + + + ./config/ + + + ${project.build.directory} + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + org.springframework.boot spring-boot-maven-plugin + + ${project.build.finalName} + + true + + + + + + repackage + + + + ${project.artifactId} diff --git a/chushang-modules/chushang-module-oss/oss-service/pom.xml b/chushang-modules/chushang-module-oss/oss-service/pom.xml index 376d751..83aec27 100644 --- a/chushang-modules/chushang-module-oss/oss-service/pom.xml +++ b/chushang-modules/chushang-module-oss/oss-service/pom.xml @@ -26,10 +26,59 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + **/application.yml + **/bootstrap.yml + **/logback-nacos.xml + + + + true + + lib/ + + false + + com.chushang.OssApplication + + + + ./config/ + + + ${project.build.directory} + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + org.springframework.boot spring-boot-maven-plugin + + ${project.build.finalName} + + true + + + + + + repackage + + + + ${project.artifactId} diff --git a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/OssApplication.java b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/OssApplication.java similarity index 97% rename from chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/OssApplication.java rename to chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/OssApplication.java index b1adb7f..e35cabd 100644 --- a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/OssApplication.java +++ b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/OssApplication.java @@ -1,4 +1,4 @@ -package com.chushang.oss; +package com.chushang; import com.chushang.common.core.enums.AppStartType; import com.chushang.common.feign.annotation.EnableOnnFeignClients; diff --git a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/controller/FileController.java b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/controller/FileController.java index 6492aff..fef2562 100644 --- a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/controller/FileController.java +++ b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/controller/FileController.java @@ -40,11 +40,13 @@ public class FileController { @SysLog(value = "文件上传", businessType = BusinessType.INSERT) @PostMapping(value = "/upload") public AjaxResult uploadFile(@RequestParam(value = "files") MultipartFile[] files, - @RequestParam(value = "ocrType", required = false) String ocrType) + @RequestParam(value = "ocrType", required = false) String ocrType, + @RequestParam(value = "sealFlag", required = false, defaultValue= "false") Boolean sealFlag, + @RequestParam(value = "formats", required = false) String formats) { List result = new ArrayList<>(); for (MultipartFile file : files) { - FileSourceVo info = fileSourceService.addFile(file); + FileSourceVo info = fileSourceService.addFile(file, sealFlag, formats); if (StrUtil.isNotEmpty(ocrType)) { OcrDTO ocr = new OcrDTO(); OcrTypeEnum ocrTypeEnum = OcrTypeEnum.findByCode(ocrType); diff --git a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/FileSourceService.java b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/FileSourceService.java index 65048b4..91153ab 100644 --- a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/FileSourceService.java +++ b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/FileSourceService.java @@ -13,7 +13,6 @@ import com.chushang.common.core.util.FileUtils; import com.chushang.common.core.util.IPUtils; import com.chushang.common.core.util.ServletUtils; import com.chushang.common.mybatis.enums.Operator; -import com.chushang.oss.config.UploadConfig; import com.chushang.oss.entity.FileSourceInfo; import com.chushang.oss.entity.vo.FileSourceVo; import com.chushang.oss.mapper.FileSourceMapper; @@ -32,7 +31,6 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.time.ZonedDateTime; -import java.util.ArrayList; import java.util.List; /** @@ -61,9 +59,11 @@ public class FileSourceService /** * 上传 到minio 或者 oss 服务中 * - * @param file 文件 + * @param file 文件 + * @param sealFlag + * @param formats */ - public FileSourceVo addFile(MultipartFile file) { + public FileSourceVo addFile(MultipartFile file, Boolean sealFlag, String formats) { String ip = IPUtils.clientIp(ServletUtils.getRequest()); String fid = generateFid(); String fName = file.getOriginalFilename(); @@ -94,7 +94,7 @@ public class FileSourceService info.setStorage(storage); info.setUploadIp(ip); // 上传到 oss 或者 minio - String realPath = ossService.upload(file.getInputStream(), info); + String realPath = ossService.upload(file.getBytes(), info, sealFlag, formats); // 带https 的路径 info.setRealPath(realPath); RMap map = redissonClient.getMap("OSS-Cache"); diff --git a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/OssService.java b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/OssService.java index 39c1e41..35673a4 100644 --- a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/OssService.java +++ b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/OssService.java @@ -1,10 +1,14 @@ package com.chushang.oss.service; +import com.chushang.common.core.exception.ResultException; +import com.chushang.common.core.util.FileUtils; import com.chushang.common.core.util.IdUtils; +import com.chushang.common.core.util.StringUtils; import com.chushang.oss.entity.FileSourceInfo; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.util.Arrays; import java.util.List; public interface OssService { @@ -20,16 +24,23 @@ public interface OssService { * @param info 文件信息 * @return 返回http地址 */ - default String upload(byte[] data, FileSourceInfo info){ - return upload(new ByteArrayInputStream(data), info); + default String upload(byte[] data, FileSourceInfo info, Boolean sealFlag, String formats){ + InputStream inputStream = new ByteArrayInputStream(data); + // 为true 时 添加水印 + if (sealFlag){ + if (StringUtils.isEmpty(formats)) throw new ResultException("添加水印时, 水印内容不能为空"); + inputStream = FileUtils.waterSeal(Arrays.stream(formats.split(",")).toList(), inputStream); + } + return upload(inputStream, info); } String getPrefixPath(String prefix, String filename); /** * 文件上传 - * @param inputStream 文件字节数组 - * @param info 文件信息 - * @return 返回http地址 + * + * @param inputStream 文件字节数组 + * @param info 文件信息 + * @return 返回http地址 */ String upload(InputStream inputStream, FileSourceInfo info); diff --git a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/AliServiceImpl.java b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/AliServiceImpl.java index d8267c6..48ad3c3 100644 --- a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/AliServiceImpl.java +++ b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/AliServiceImpl.java @@ -7,12 +7,10 @@ import com.aliyun.oss.model.DeleteObjectsRequest; import com.aliyun.oss.model.DeleteObjectsResult; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.Payer; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.chushang.common.core.exception.ResultException; import com.chushang.common.core.util.StringUtils; import com.chushang.oss.config.UploadConfig; import com.chushang.oss.entity.FileSourceInfo; -import com.chushang.oss.mapper.FileSourceMapper; import com.chushang.oss.service.OssService; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; @@ -20,9 +18,7 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.io.ByteArrayInputStream; import java.io.InputStream; -import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; diff --git a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/MinioServiceImpl.java b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/MinioServiceImpl.java index 2e71f94..ebc6885 100644 --- a/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/MinioServiceImpl.java +++ b/chushang-modules/chushang-module-oss/oss-service/src/main/java/com/chushang/oss/service/impl/MinioServiceImpl.java @@ -1,13 +1,15 @@ package com.chushang.oss.service.impl; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.util.StrUtil; import com.chushang.common.core.exception.ResultException; +import com.chushang.common.core.util.FileUtils; import com.chushang.common.core.util.StringUtils; import com.chushang.oss.config.UploadConfig; import com.chushang.oss.entity.FileSourceInfo; import com.chushang.oss.service.OssService; import io.minio.*; -import io.minio.errors.*; import io.minio.messages.Bucket; import io.minio.messages.DeleteError; import io.minio.messages.DeleteObject; @@ -18,14 +20,12 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import java.awt.*; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; -import java.lang.module.ResolutionException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -40,22 +40,27 @@ public class MinioServiceImpl implements OssService { private MinioClient minio; @Resource private UploadConfig config; - @PostConstruct public void init() { minio = MinioClient.builder().endpoint(config.getEndPoint()) .credentials(config.getAccessKey(), config.getSecretKey()).build(); try { if (!minio.bucketExists(BucketExistsArgs.builder().bucket(config.getBucketName()).build())) { + log.info("createBucket {}", config.getBucketName()); createBucket(); } } catch (Exception e) { log.error("MinIO Storage Connection Fail"); } + log.info("createFont "); } + /** + * 创建minio bucket + */ @SneakyThrows - private void createBucket(){ + private void createBucket() + { String bucketName = config.getBucketName(); // 注意 minio通过nginx代理后无法判断桶是否存在 需要通过查询所有桶的形式 diff --git a/chushang-modules/chushang-module-system/system-service/pom.xml b/chushang-modules/chushang-module-system/system-service/pom.xml index 2d4b47b..f8e41d3 100644 --- a/chushang-modules/chushang-module-system/system-service/pom.xml +++ b/chushang-modules/chushang-module-system/system-service/pom.xml @@ -30,11 +30,60 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + **/application.yml + **/bootstrap.yml + **/logback-nacos.xml + + + + true + + lib/ + + false + + com.chushang.SystemApplication + + + + ./config/ + + + ${project.build.directory} + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + org.springframework.boot spring-boot-maven-plugin + + ${project.build.finalName} + + true + + + + + + repackage + + + + ${project.artifactId} diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/SystemApplication.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/SystemApplication.java similarity index 98% rename from chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/SystemApplication.java rename to chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/SystemApplication.java index 0067d45..68b3164 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/SystemApplication.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/SystemApplication.java @@ -1,4 +1,4 @@ -package com.chushang.system; +package com.chushang; import com.chushang.common.core.enums.AppStartType; import com.chushang.common.feign.annotation.EnableOnnFeignClients; diff --git a/chushang-modules/chushang-module-system/system-service/src/test/java/DemoTest.java b/chushang-modules/chushang-module-system/system-service/src/test/java/DemoTest.java index 1b039a9..920e0c2 100644 --- a/chushang-modules/chushang-module-system/system-service/src/test/java/DemoTest.java +++ b/chushang-modules/chushang-module-system/system-service/src/test/java/DemoTest.java @@ -1,11 +1,8 @@ -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONUtil; -import com.chushang.common.core.util.StringUtils; import com.chushang.security.service.TokenService; -import com.chushang.system.SystemApplication; +import com.chushang.SystemApplication; import com.chushang.system.entity.po.SysMenu; import com.chushang.system.entity.po.SysUser; -import com.chushang.security.entity.vo.LoginUser; import com.chushang.system.entity.vo.RouterVo; import com.chushang.system.service.*; import lombok.extern.slf4j.Slf4j; diff --git a/pom.xml b/pom.xml index fb871ce..ccd7328 100644 --- a/pom.xml +++ b/pom.xml @@ -569,6 +569,20 @@ src/main/resources true + + application*.yml + bootstrap*.yml + logback*.xml + + + + src/main/resources + true + + application*.yml + bootstrap*.yml + logback*.xml + @@ -586,11 +600,13 @@ 17 ${project.build.sourceEncoding} + ${maven-compiler-plugin.version} org.apache.maven.plugins maven-surefire-plugin + ${maven-surefire-plugin.version} ${maven.test.skip} @@ -619,6 +635,11 @@ spring-javaformat-maven-plugin ${spring.checkstyle.plugin} + + org.apache.maven.plugins + maven-resources-plugin + ${maven-resources-plugin.version} +