diff --git a/bonus-modules/bonus-file/src/main/java/com/bonus/file/utils/MinioUtil.java b/bonus-modules/bonus-file/src/main/java/com/bonus/file/utils/MinioUtil.java index a44f773..051a3c1 100644 --- a/bonus-modules/bonus-file/src/main/java/com/bonus/file/utils/MinioUtil.java +++ b/bonus-modules/bonus-file/src/main/java/com/bonus/file/utils/MinioUtil.java @@ -1,6 +1,8 @@ package com.bonus.file.utils; +import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.utils.ip.IpUtils; import com.bonus.file.config.MinioConfig; import com.bonus.file.entity.FileDetails; import com.bonus.system.api.domain.SysFile; @@ -15,6 +17,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; @@ -300,32 +303,36 @@ public class MinioUtil { return getFileUrl(bucketName, objectName, 604800); } - public String getFullFileUrl(String fileUrl) throws Exception { - if (StringUtils.isNotEmpty(fileUrl)){ - if (fileUrl.startsWith("http://")) { - return fileUrl; - } - // 获取当前访问系统的 IP(通过配置或工具方法获取) - String currentIp = InetAddress.getLocalHost().getHostAddress(); - - // 判断访问来源是内网还是外网 - boolean isIntranet = currentIp.startsWith("10."); - - // 根据来源返回不同的访问地址 - String endpoint; - if (isIntranet) { - // 内网访问,比如你给的 10.145.136.229 - endpoint = minioConfig.getEndpointInter(); - } else { - // 外网或局域网访问,比如你给的 192.168.20.234 - endpoint = minioConfig.getEndpoint(); - } - - // 拼接完整路径(MinIO 地址) - return endpoint + "/" + minioConfig.getBucketName() + "/" + fileUrl; - } else { + public String getFullFileUrl(String fileUrl) throws Exception { + // fileUrl 为空直接返回空字符串 + if (StringUtils.isBlank(fileUrl)) { return ""; } + + fileUrl = fileUrl.trim(); + + // 如果已经是完整 URL,直接返回 + if (fileUrl.startsWith("http://") || fileUrl.startsWith("https://")) { + return fileUrl; + } + + // 获取当前访问系统的客户端 IP(若依框架工具) + HttpServletRequest request = ServletUtils.getRequest(); + String clientIp = IpUtils.getIpAddr(request); + + + // 根据访问来源选择不同的 endpoint + String endpoint; + if (clientIp != null && clientIp.startsWith("10.")) { + // 内网访问 + endpoint = minioConfig.getEndpointInter(); + } else { + // 局域网或外网访问 + endpoint = minioConfig.getEndpoint(); + } + + // 拼接完整 MinIO URL + return endpoint + "/" + minioConfig.getBucketName() + "/" + fileUrl; } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java index 701fd5f..ef9d5e8 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java @@ -25,6 +25,7 @@ import com.bonus.system.mapper.*; import com.bonus.system.service.ISysConfigService; import com.bonus.system.service.ISysDeptService; import com.bonus.system.service.ISysUserService; +import com.bonus.system.utils.FileCommonUtils; import org.apache.poi.ss.formula.functions.T; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -120,6 +121,7 @@ public class SysUserServiceImpl implements ISysUserService { List sysUsers = userMapper.selectUserList(user); for (SysUser sysUser : sysUsers) { + sysUser.setPhotoUrl(remoteFileService.getFullFileUrl(FileCommonUtils.getFullFileUrl(sysUser.getPhotoUrl()))); sysUser.setPhotoUrl(remoteFileService.getFullFileUrl(sysUser.getPhotoUrl())); } if(user.getQueryTyoe()==1){ diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/utils/FileCommonUtils.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/utils/FileCommonUtils.java new file mode 100644 index 0000000..6447d1d --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/utils/FileCommonUtils.java @@ -0,0 +1,26 @@ +package com.bonus.system.utils; + +public class FileCommonUtils { + + /** + * 处理图片路径,判断前缀并返回完整访问路径 + * @param fileUrl 上传路径(如 uploads/2025/09/28/xxx.png 或完整 URL) + * @return 返回拼接好 IP 的完整路径 + */ + public static String getFullFileUrl(String fileUrl) { + if (fileUrl == null || fileUrl.trim().isEmpty()) { + return ""; + } + + fileUrl = fileUrl.trim(); + int index = fileUrl.indexOf("uploads/"); + if (index != -1) { + // 存在 uploads/,截取路径 + return fileUrl.substring(index); + } else { + // 不存在 uploads/,直接返回原始 URL + return fileUrl; + } + } + +}