diff --git a/src/main/java/com/ai/da/common/utils/MinioUtil.java b/src/main/java/com/ai/da/common/utils/MinioUtil.java index b15fdf2f..484b05e3 100644 --- a/src/main/java/com/ai/da/common/utils/MinioUtil.java +++ b/src/main/java/com/ai/da/common/utils/MinioUtil.java @@ -52,6 +52,18 @@ public class MinioUtil { return minioClient; } + @Autowired + private RedisUtil redisUtil; + + /** + * Redis缓存key前缀,用于Minio签名URL缓存 + */ + private static final String REDIS_MINIO_URL_PREFIX = "minio:url:"; + + /** + * 签名URL缓存过期时间(秒),默认1天 + */ + private static final long URL_CACHE_EXPIRE_SECONDS = 24 * 60 * 60; /** * description: 判断bucket是否存在,不存在则创建 * @@ -392,6 +404,11 @@ public class MinioUtil { * @return 文件的临时URL,如果出现异常则返回null */ public String getPreSignedUrl(String bucketName, String fileName, int expiry) { + String cacheKey = REDIS_MINIO_URL_PREFIX + bucketName + "/" + fileName; + Object cachedUrl = redisUtil.getFromString(cacheKey); + if (cachedUrl != null) { + return cachedUrl.toString(); + } try { String lowerName = fileName.toLowerCase(); @@ -419,8 +436,9 @@ public class MinioUtil { builder.extraQueryParams(queryParams); } - - return minioClient.getPresignedObjectUrl(builder.build()); + String presignedObjectUrl = minioClient.getPresignedObjectUrl(builder.build()); + redisUtil.addToString(cacheKey, presignedObjectUrl, URL_CACHE_EXPIRE_SECONDS); + return presignedObjectUrl; } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException | IllegalArgumentException e) { e.printStackTrace();