diff --git a/src/main/java/com/ai/da/common/utils/LocalCacheUtils.java b/src/main/java/com/ai/da/common/utils/LocalCacheUtils.java index 0c65eb19..28242107 100644 --- a/src/main/java/com/ai/da/common/utils/LocalCacheUtils.java +++ b/src/main/java/com/ai/da/common/utils/LocalCacheUtils.java @@ -403,4 +403,49 @@ public final class LocalCacheUtils { return null; } + /** + * 预签名URL缓存 + */ + private static LoadingCache presignedUrlCache = CacheBuilder.newBuilder() + .concurrencyLevel(10) + .expireAfterWrite((24 * 60 - 1), TimeUnit.MINUTES) + .initialCapacity(100) + .maximumSize(10000) + .recordStats() + .build(new CacheLoader() { + @Override + public String load(String key) throws Exception { + return "null"; + } + }); + + /** + * 添加预签名URL到缓存 + * + * @param key URL的唯一标识 + * @param value 预签名URL + */ + public static void setPresignedUrlCache(String key, String value) { + presignedUrlCache.put(key, value); + } + + /** + * 获取预签名URL + * + * @param key URL的唯一标识 + * @return 预签名URL,如果不存在则返回null + */ + public static String getPresignedUrlCache(String key) { + try { + String value = presignedUrlCache.get(key); + if ("null".equals(value)) { + return null; + } + return value; + } catch (ExecutionException e) { + log.error("getPresignedUrlCache方法错误", e); + } + return null; + } + } 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 e1e6c75d..10edb32f 100644 --- a/src/main/java/com/ai/da/common/utils/MinioUtil.java +++ b/src/main/java/com/ai/da/common/utils/MinioUtil.java @@ -370,13 +370,19 @@ public class MinioUtil { } public String getPresignedUrl(String path, int expiry) { - if (!path.contains("/")) { - throw new BusinessException("The path is error!"); + if (LocalCacheUtils.getPresignedUrlCache(path) != null) { + return LocalCacheUtils.getPresignedUrlCache(path); + }else { + if (!path.contains("/")) { + throw new BusinessException("The path is error!"); + } + int index = path.indexOf("/"); + String bucketName = path.substring(0, index); + String fileName = path.substring(index + 1); + String presignedUrl = getPresignedUrl(bucketName, fileName, expiry); + LocalCacheUtils.setPresignedUrlCache(path, presignedUrl); + return presignedUrl; } - int index = path.indexOf("/"); - String bucketName = path.substring(0, index); - String fileName = path.substring(index + 1); - return getPresignedUrl(bucketName, fileName, expiry); } /** diff --git a/src/main/java/com/ai/da/service/impl/ChatRobotServiceImpl.java b/src/main/java/com/ai/da/service/impl/ChatRobotServiceImpl.java index d58bb127..7e1fd107 100644 --- a/src/main/java/com/ai/da/service/impl/ChatRobotServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/ChatRobotServiceImpl.java @@ -206,7 +206,7 @@ public class ChatRobotServiceImpl implements ChatRobotService { if (!CollectionUtils.isEmpty(libraryList)) { chatRobotLibraryVO.setId(libraryList.get(0).getId()); } - String aidaSysImage = minioUtil.getPresignedUrl("aida-sys-image", "images/" + array.getString(i), 10); + String aidaSysImage = minioUtil.getPresignedUrl("aida-sys-image", "images/" + array.getString(i), 24 * 60); chatRobotLibraryVO.setUrl(bucketName + "/" + path); chatRobotLibraryVO.setPresignedUrl(aidaSysImage); chatRobotLibraryVOList.add(chatRobotLibraryVO); diff --git a/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java b/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java index f0a4acad..9fd46643 100644 --- a/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java @@ -88,7 +88,7 @@ public class CollectionElementServiceImpl extends ServiceImpl> maps = collectionElements @@ -93,21 +93,21 @@ public class CollectionServiceImpl extends ServiceImpl{ d.setDesignType(DesignTypeEnum.COLLECTION.getRealName()); - d.setUrl(minioUtil.getPresignedUrl(o.getUrl(), 10)); + d.setUrl(minioUtil.getPresignedUrl(o.getUrl(), 24 * 60)); })); break; case PRINT_BOARD: response.setPrintBoards(CopyUtil.copyList(v,CollectionElementVO.class,(o,d)->{ d.setIsPin(o.getHasPin()); d.setDesignType(DesignTypeEnum.COLLECTION.getRealName()); - d.setUrl(minioUtil.getPresignedUrl(o.getUrl(), 10)); + d.setUrl(minioUtil.getPresignedUrl(o.getUrl(), 24 * 60)); })); break; case SKETCH_BOARD: response.setSketchBoards(CopyUtil.copyList(v,CollectionElementVO.class,(o,d) ->{ d.setIsPin(o.getHasPin()); d.setDesignType(DesignTypeEnum.COLLECTION.getRealName()); - d.setUrl(minioUtil.getPresignedUrl(o.getUrl(), 10)); + d.setUrl(minioUtil.getPresignedUrl(o.getUrl(), 24 * 60)); })); break; case COLOR_BOARD: diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 9fb2ab0c..446c8ed2 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -483,7 +483,7 @@ public class DesignServiceImpl extends ServiceImpl impleme String designUrl = designPythonOutfit.getDesignUrl(); if (!StringUtils.isEmpty(designUrl) && designUrl.contains("/")) { int firstIndex = designUrl.indexOf("/"); - designCollectionItemVO.setDesignOutfitUrl(minIoUtil.getPresignedUrl(designUrl.substring(0,firstIndex), designUrl.substring(firstIndex+1), 5)); + designCollectionItemVO.setDesignOutfitUrl(minIoUtil.getPresignedUrl(designUrl.substring(0,firstIndex), designUrl.substring(firstIndex+1), 24 * 60)); } //response designCollectionItems.add(designCollectionItemVO); diff --git a/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java b/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java index 180e72c5..ec1881f4 100644 --- a/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java @@ -139,7 +139,7 @@ public class LibraryServiceImpl extends ServiceImpl impl QueryLibraryPageVO libraryPageVO = CopyUtil.copyObject(library,QueryLibraryPageVO.class); libraryPageVO.setDesignType(DesignTypeEnum.LIBRARY.getRealName()); libraryPageVO.setMinIOPath(library.getUrl()); - libraryPageVO.setUrl(minioUtil.getPresignedUrl(library.getUrl(),480)); + libraryPageVO.setUrl(minioUtil.getPresignedUrl(library.getUrl(),24 * 60)); if(finalMap != null && finalMap.containsKey(library.getId())){ libraryPageVO.setLibraryModelPoint(finalMap.get(library.getId())); } @@ -182,7 +182,7 @@ public class LibraryServiceImpl extends ServiceImpl impl Library library = resolveData(libraryUploadDTO, userInfo, newFilePath); LibraryUpdateVo libraryUpdateVo = CopyUtil.copyObject(library, LibraryUpdateVo.class); libraryUpdateVo.setMinIOPath(libraryUpdateVo.getUrl()); - libraryUpdateVo.setUrl(minioUtil.getPresignedUrl(newFilePath, 480)); + libraryUpdateVo.setUrl(minioUtil.getPresignedUrl(newFilePath, 24 * 60)); return libraryUpdateVo; }else if (libraryUploadDTO.getModelType().equals(ModelType.SYSTEM.getValue())) { bucketName = "aida-sys-image"; @@ -192,7 +192,7 @@ public class LibraryServiceImpl extends ServiceImpl impl Library library = resolveData(libraryUploadDTO, userInfo, newFilePath); LibraryUpdateVo libraryUpdateVo = CopyUtil.copyObject(library, LibraryUpdateVo.class); libraryUpdateVo.setMinIOPath(libraryUpdateVo.getUrl()); - libraryUpdateVo.setUrl(minioUtil.getPresignedUrl(newFilePath, 480)); + libraryUpdateVo.setUrl(minioUtil.getPresignedUrl(newFilePath, 24 * 60)); return libraryUpdateVo; }else { throw new BusinessException("unknown modelType"); @@ -203,7 +203,7 @@ public class LibraryServiceImpl extends ServiceImpl impl Library library = resolveData(libraryUploadDTO, userInfo, filePath); LibraryUpdateVo libraryUpdateVo = CopyUtil.copyObject(library, LibraryUpdateVo.class); libraryUpdateVo.setMinIOPath(libraryUpdateVo.getUrl()); - libraryUpdateVo.setUrl(minioUtil.getPresignedUrl(libraryUpdateVo.getUrl(), 480)); + libraryUpdateVo.setUrl(minioUtil.getPresignedUrl(libraryUpdateVo.getUrl(), 24 * 60)); return libraryUpdateVo; } } diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 34f836c1..9d7472e6 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -111,7 +111,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(TDesignPythonOutfit::getDesignItemId, o.getDesignItemId()); List tDesignPythonOutfits = designPythonOutfitMapper.selectList(qw); diff --git a/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java b/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java index 650d8d95..02e95b2d 100644 --- a/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java @@ -160,16 +160,16 @@ public class WorkspaceServiceImpl extends ServiceImpl