From 34312ff6193083ef692472c2f5449cd2d26093d3 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Fri, 10 Dec 2021 11:44:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0mongo=20+=20minio=E7=9A=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module-file/pom.xml | 8 + .../file/service/IDefaultFileService.java | 28 +++- .../module/file/service/IFileService.java | 1 + .../file/service/IMinIoFileService.java | 29 ++++ .../service/impl/DefaultFileServiceImpl.java | 77 ++++++++- .../file/service/impl/FileServiceImpl.java | 100 ++++++------ .../service/impl/MinIoFileServiceImpl.java | 150 +++++++++++++++++- 7 files changed, 336 insertions(+), 57 deletions(-) diff --git a/module-file/pom.xml b/module-file/pom.xml index 58dc8620..6f6fc221 100644 --- a/module-file/pom.xml +++ b/module-file/pom.xml @@ -33,6 +33,14 @@ + + + org.springframework.data + spring-data-mongodb + provided + + + \ No newline at end of file diff --git a/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java b/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java index f0eaab82..ed4d168f 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java @@ -3,7 +3,12 @@ package ink.wgink.module.file.service; import ink.wgink.exceptions.FileException; import ink.wgink.exceptions.base.SystemException; import ink.wgink.module.file.enums.UploadTypeEnum; +import ink.wgink.module.file.pojo.dtos.FileDTO; +import ink.wgink.module.file.pojo.dtos.FileInfoDTO; +import ink.wgink.module.file.pojo.vos.FileVO; +import ink.wgink.pojo.ListPage; import ink.wgink.pojo.pos.FilePO; +import ink.wgink.pojo.result.SuccessResultList; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -20,6 +25,8 @@ import java.util.Map; */ public interface IDefaultFileService { + String saveFileByUserId(String userId, FileVO fileVO); + /** * 上传文件 * @@ -41,6 +48,8 @@ public interface IDefaultFileService { */ void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); + void remove(List ids); + /** * 物理删除文件 * @@ -48,6 +57,13 @@ public interface IDefaultFileService { */ void deleteFile(List filePOs); + /** + * 物理删除 + * + * @param params + */ + void delete(List ids); + /** * 保存文件信息 * @@ -92,7 +108,7 @@ public interface IDefaultFileService { * @param params * @param canRange */ - void downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange); + boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange); /** * 下载文件 @@ -106,4 +122,14 @@ public interface IDefaultFileService { */ boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange); + SuccessResultList> listPageInfo(ListPage page); + + List list(List idList); + + List listPO(List idList); + + FilePO getPO(String fileId); + + List listByUrl(String url); + } diff --git a/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java b/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java index a8312a6c..b53a4588 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java @@ -228,6 +228,7 @@ public interface IFileService { * @param params * @return */ + @Deprecated FilePO getPO(Map params); /** diff --git a/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java b/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java index 31382db7..4ba7f43c 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java @@ -1,7 +1,12 @@ package ink.wgink.module.file.service; import ink.wgink.module.file.enums.UploadTypeEnum; +import ink.wgink.module.file.pojo.dtos.FileDTO; +import ink.wgink.module.file.pojo.dtos.FileInfoDTO; +import ink.wgink.module.file.pojo.vos.FileVO; +import ink.wgink.pojo.ListPage; import ink.wgink.pojo.pos.FilePO; +import ink.wgink.pojo.result.SuccessResultList; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -18,6 +23,10 @@ import java.util.Map; */ public interface IMinIoFileService { + String saveFileByUserId(String userId, FileVO fileVO); + + void remove(List ids); + /** * 物理删除文件 * @@ -45,6 +54,17 @@ public interface IMinIoFileService { */ void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); + /** + * 下载文件 + * + * @param request + * @param response + * @param params + * @param canRange + * @return + */ + boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange); + /** * 下载文件 * @@ -56,4 +76,13 @@ public interface IMinIoFileService { */ boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange); + SuccessResultList> listPageInfo(ListPage page); + + List list(List idList); + + List listPO(List idList); + + FilePO getPO(String fileId); + + List listByUrl(String fileUrl); } diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java index 02df15e9..0d1cc040 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java @@ -1,18 +1,25 @@ package ink.wgink.module.file.service.impl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.exceptions.FileException; import ink.wgink.exceptions.SaveException; import ink.wgink.exceptions.base.SystemException; import ink.wgink.module.file.dao.IFileDao; import ink.wgink.module.file.enums.UploadTypeEnum; +import ink.wgink.module.file.pojo.dtos.FileDTO; import ink.wgink.module.file.pojo.dtos.FileInfoDTO; +import ink.wgink.module.file.pojo.vos.FileVO; import ink.wgink.module.file.service.IDefaultFileService; import ink.wgink.module.file.service.IFileService; +import ink.wgink.pojo.ListPage; import ink.wgink.pojo.pos.FilePO; +import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.properties.FileProperties; import ink.wgink.util.UUIDUtil; import ink.wgink.util.date.DateUtil; +import ink.wgink.util.map.HashMapUtil; import ink.wgink.util.request.StaticResourceRequestUtil; import net.coobird.thumbnailator.Thumbnails; import org.apache.catalina.connector.ClientAbortException; @@ -32,6 +39,7 @@ import java.nio.channels.FileChannel; import java.nio.channels.WritableByteChannel; import java.security.MessageDigest; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -56,6 +64,17 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau private String[] audioTypes; private String[] fileTypes; + @Override + public String saveFileByUserId(String userId, FileVO fileVO) { + String fileId = UUIDUtil.getUUID(); + Map params = HashMapUtil.beanToMap(fileVO); + params.put("fileId", fileId); + params.put("isBack", 0); + setSaveInfoByUserId(params, userId); + fileDao.save(params); + return fileId; + } + /** * 上传文件 * @@ -129,6 +148,14 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau } } + @Override + public void remove(List ids) { + Map params = getHashMap(2); + params.put("fileIds", ids); + setUpdateInfo(params); + fileDao.remove(params); + } + @Override public void deleteFile(List filePOs) { Map fileParams = getHashMap(4); @@ -177,6 +204,13 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau } } + @Override + public void delete(List ids) { + Map params = getHashMap(2); + params.put("fileIds", ids); + fileDao.delete(params); + } + /** * 删除源文件 * @@ -275,10 +309,13 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau } @Override - public void downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange) { + public boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange) { FilePO filePO = fileDao.getPO(params); + if (null == filePO) { + throw new FileException("文件不存在"); + } boolean isOpen = Boolean.valueOf(params.get("isOpen").toString()); - downLoadFile(request, response, filePO, isOpen, canRange); + return downLoadFile(request, response, filePO, isOpen, canRange); } @Override @@ -351,6 +388,42 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau return isDownloadComplete; } + @Override + public SuccessResultList> listPageInfo(ListPage page) { + PageHelper.startPage(page.getPage(), page.getRows()); + List fileInfoDTOs = fileDao.listInfo(page.getParams()); + PageInfo pageInfo = new PageInfo<>(fileInfoDTOs); + return new SuccessResultList<>(fileInfoDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + @Override + public List list(List idList) { + Map params = getHashMap(1); + params.put("ids", idList); + return fileDao.list(params); + } + + @Override + public List listPO(List idList) { + Map params = getHashMap(2); + params.put("fileIds", idList); + return fileDao.listPO(params); + } + + @Override + public FilePO getPO(String fileId) { + Map params = new HashMap<>(); + params.put("fileId", fileId); + return fileDao.getPO(params); + } + + @Override + public List listByUrl(String fileUrl) { + Map params = getHashMap(2); + params.put("fileUrl", fileUrl); + return fileDao.list(params); + } + /** * 处理视频流问题 * diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java index 25f76a5f..6bcf0c24 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java @@ -5,11 +5,9 @@ import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import ink.wgink.common.base.DefaultBaseService; -import ink.wgink.exceptions.FileException; import ink.wgink.exceptions.ParamsException; import ink.wgink.exceptions.SearchException; import ink.wgink.exceptions.base.SystemException; -import ink.wgink.module.file.dao.IFileDao; import ink.wgink.module.file.enums.UploadTypeEnum; import ink.wgink.module.file.pojo.dtos.FileDTO; import ink.wgink.module.file.pojo.dtos.FileInfoDTO; @@ -23,8 +21,6 @@ import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.properties.FileProperties; import ink.wgink.util.ResourceUtil; -import ink.wgink.util.UUIDUtil; -import ink.wgink.util.map.HashMapUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,26 +44,20 @@ import java.util.*; public class FileServiceImpl extends DefaultBaseService implements IFileService { private static final Logger LOG = LoggerFactory.getLogger(FileServiceImpl.class); - @Autowired private FileProperties fileProperties; @Autowired - private IFileDao fileDao; - @Autowired private IDefaultFileService defaultFileService; @Autowired private IMinIoFileService minIoFileService; - public List listFileInfo(Map params) { - return fileDao.listInfo(params); - } - @Override public SuccessResultList> listPageInfo(ListPage page) { - PageHelper.startPage(page.getPage(), page.getRows()); - List fileInfoDTOs = fileDao.listInfo(page.getParams()); - PageInfo pageInfo = new PageInfo<>(fileInfoDTOs); - return new SuccessResultList<>(fileInfoDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + if (fileProperties.getUseMinIo()) { + return minIoFileService.listPageInfo(page); + } else { + return defaultFileService.listPageInfo(page); + } } @Override @@ -77,10 +67,11 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService @Override public void remove(List ids) { - Map params = getHashMap(2); - params.put("fileIds", ids); - setUpdateInfo(params); - fileDao.remove(params); + if (fileProperties.getUseMinIo()) { + minIoFileService.remove(ids); + } else { + defaultFileService.remove(ids); + } } @Override @@ -98,9 +89,8 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService minIoFileService.deleteFile(filePOs); } else { defaultFileService.deleteFile(filePOs); + defaultFileService.delete(ids); } - // 删除记录 - fileDao.delete(params); } @Override @@ -182,27 +172,29 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService @Override public List list(List idList) throws SearchException { - Map params = getHashMap(1); - params.put("ids", idList); - return fileDao.list(params); + if (fileProperties.getUseMinIo()) { + return minIoFileService.list(idList); + } else { + return defaultFileService.list(idList); + } } @Override public List listPO(List idList) { - Map params = getHashMap(2); - params.put("fileIds", idList); - return fileDao.listPO(params); + if (fileProperties.getUseMinIo()) { + return minIoFileService.listPO(idList); + } else { + return defaultFileService.listPO(idList); + } } @Override public String saveFileByUserId(String userId, FileVO fileVO) { - String fileId = UUIDUtil.getUUID(); - Map params = HashMapUtil.beanToMap(fileVO); - params.put("fileId", fileId); - params.put("isBack", 0); - setSaveInfoByUserId(params, userId); - fileDao.save(params); - return fileId; + if (fileProperties.getUseMinIo()) { + return minIoFileService.saveFileByUserId(userId, fileVO); + } else { + return defaultFileService.saveFileByUserId(userId, fileVO); + } } @@ -218,19 +210,11 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService @Override public boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange) { - FilePO filePO = fileDao.getPO(params); - if (null == filePO) { - throw new FileException("文件不存在"); - } - boolean isOpen = Boolean.valueOf(params.get("isOpen").toString()); - // 没有备份的数据从本地下载 - if (filePO.getIsBack() == 0) { - return defaultFileService.downLoadFile(request, response, filePO, isOpen, canRange); - } if (fileProperties.getUseMinIo()) { - return minIoFileService.downLoadFile(request, response, filePO, isOpen, canRange); + return minIoFileService.downLoadFile(request, response, params, canRange); + } else { + return defaultFileService.downLoadFile(request, response, params, canRange); } - throw new FileException("文件下载异常"); } @Override @@ -270,7 +254,15 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService @Override public FilePO getPO(Map params) throws SearchException { - return fileDao.getPO(params); + if (params.get("fileId") == null) { + throw new ParamsException("fileId不能为空"); + } + String fileId = params.get("fileId").toString(); + if (fileProperties.getUseMinIo()) { + return minIoFileService.getPO(fileId); + } else { + return defaultFileService.getPO(fileId); + } } /** @@ -286,14 +278,22 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService int pageSize = Integer.parseInt(params.get("size").toString()); int pageNum = start / pageSize + 1; String downloadFile = "true"; + String fileUrl = null; if (UEDITOR_LIST_IMAGE.equals(action)) { - params.put("fileUrl", "images"); - } else if (UEDITOR_LIST_FILE.equals(action)) { - params.put("fileUrl", "files"); + fileUrl = "images"; + } else { + // UEDITOR_LIST_FILE.equals(action) + fileUrl = "files"; downloadFile = "false"; } PageHelper.startPage(pageNum, pageSize); - List listFileDTOs = fileDao.list(params); + List listFileDTOs; + if (fileProperties.getUseMinIo()) { + listFileDTOs = minIoFileService.listByUrl(fileUrl); + } else { + listFileDTOs = defaultFileService.listByUrl(fileUrl); + } + PageInfo pageInfo = new PageInfo<>(listFileDTOs); List> fileList = new ArrayList<>(); for (FileDTO fileDTO : listFileDTOs) { diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java index fee18923..74c44f45 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java @@ -5,12 +5,20 @@ import ink.wgink.exceptions.FileException; import ink.wgink.exceptions.base.SystemException; import ink.wgink.module.file.dao.IFileDao; import ink.wgink.module.file.enums.UploadTypeEnum; +import ink.wgink.module.file.pojo.dtos.FileDTO; +import ink.wgink.module.file.pojo.dtos.FileInfoDTO; +import ink.wgink.module.file.pojo.vos.FileVO; +import ink.wgink.module.file.service.IDefaultFileService; import ink.wgink.module.file.service.IFileService; import ink.wgink.module.file.service.IMinIoFileService; +import ink.wgink.pojo.ListPage; import ink.wgink.pojo.pos.FilePO; +import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.properties.FileMinIoProperties; import ink.wgink.properties.FileProperties; +import ink.wgink.util.ArrayListUtil; import ink.wgink.util.UUIDUtil; +import ink.wgink.util.map.HashMapUtil; import ink.wgink.util.request.StaticResourceRequestUtil; import io.minio.*; import io.minio.errors.*; @@ -18,6 +26,10 @@ import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -30,8 +42,10 @@ import java.io.OutputStream; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; /** * @ClassName: MinIOServiceImpl @@ -43,10 +57,15 @@ import java.util.Map; @Service public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFileService { + public static final String UPLOAD_FILE_COLLECTION_NAME = "uploadFiles"; @Autowired private FileProperties fileProperties; @Autowired private IFileDao fileDao; + @Autowired + private IDefaultFileService defaultFileService; + @Autowired(required = false) + private MongoTemplate mongoTemplate; private FileMinIoProperties minIoProperties; private MinioClient minioClient; @@ -63,8 +82,41 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi } @Override - public void deleteFile(List filePOs) { + public String saveFileByUserId(String userId, FileVO fileVO) { + String fileId = defaultFileService.saveFileByUserId(userId, fileVO); + if (mongoTemplate != null) { + Map params = HashMapUtil.beanToMap(fileVO); + params.put("fileId", fileId); + params.put("isBack", 0); + setSaveInfoByUserId(params, userId); + mongoTemplate.insert(params); + } + return fileId; + } + @Override + public void remove(List ids) { + if (ids.isEmpty()) { + return; + } + defaultFileService.remove(ids); + // 删除缓存 + if (mongoTemplate != null) { + mongoTemplate.remove(Query.query(Criteria.where("fileId").in(ids)), UPLOAD_FILE_COLLECTION_NAME); + } + } + + @Override + public void deleteFile(List filePOs) { + // 删除数据 + if (filePOs.isEmpty()) { + return; + } + List fileIds = ArrayListUtil.listBeanStringIdValue(filePOs, "fileId", FilePO.class); + defaultFileService.delete(fileIds); + if (mongoTemplate != null) { + mongoTemplate.remove(Query.query(Criteria.where("fileId").in(fileIds))); + } } @Override @@ -77,6 +129,22 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi uploadFile(userId, uploadFile, uploadTypeEnum, params, true); } + @Override + public boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map params, boolean canRange) { + FilePO filePO = null; + if (mongoTemplate != null) { + filePO = mongoTemplate.findOne(Query.query(Criteria.where("fileId").is(params.get("fileId").toString())), FilePO.class, UPLOAD_FILE_COLLECTION_NAME); + } + if (filePO == null) { + filePO = fileDao.getPO(params); + } + if (filePO == null) { + throw new FileException("文件不存在"); + } + boolean isOpen = Boolean.valueOf(params.get("isOpen").toString()); + return downLoadFile(request, response, filePO, isOpen, canRange); + } + /** * 上传文件 * @@ -146,9 +214,7 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi long startRange = 0; long endRange = contentLength - 1; if (!StringUtils.isBlank(rangeString)) { - if (!isOpen) { - response.setContentType("multipart/byteranges"); - } + response.setContentType("multipart/byteranges"); String[] rangeArray = rangeString.substring(rangeString.indexOf("=") + 1).split("-"); startRange = Long.valueOf(rangeArray[0]); if (rangeArray.length > 1) { @@ -183,6 +249,76 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi return isDownloadComplete; } + @Override + public SuccessResultList> listPageInfo(ListPage page) { + SuccessResultList> successResultList = null; + if (mongoTemplate != null) { + Query query = new Query(); + String keywords = getKeywords(page.getParams()); + if (!StringUtils.isBlank(keywords)) { + Pattern pattern = Pattern.compile("^.*" + keywords + ".*$", Pattern.CASE_INSENSITIVE); + query.addCriteria(Criteria.where("fileName").regex(pattern)); + } + long total = mongoTemplate.count(query, UPLOAD_FILE_COLLECTION_NAME); + query.with(Pageable.ofSize(page.getRows()).withPage(page.getPage() - 1)); + List dataDTOs = mongoTemplate.find(query, FileInfoDTO.class, UPLOAD_FILE_COLLECTION_NAME); + successResultList = new SuccessResultList<>(dataDTOs, page.getPage(), total); + } + if (successResultList != null && !successResultList.getRows().isEmpty()) { + return successResultList; + } + return defaultFileService.listPageInfo(page); + } + + @Override + public List list(List idList) { + List fileDTOs = new ArrayList<>(); + if (mongoTemplate != null) { + return mongoTemplate.find(Query.query(Criteria.where("fileId").in(idList)), FileDTO.class, UPLOAD_FILE_COLLECTION_NAME); + } + if (!fileDTOs.isEmpty()) { + return fileDTOs; + } + return defaultFileService.list(idList); + } + + @Override + public List listPO(List idList) { + List filePOs = new ArrayList<>(); + if (mongoTemplate != null) { + filePOs = mongoTemplate.find(Query.query(Criteria.where("fileId").in(idList)), FilePO.class, UPLOAD_FILE_COLLECTION_NAME); + } + if (!filePOs.isEmpty()) { + return filePOs; + } + return defaultFileService.listPO(idList); + } + + @Override + public FilePO getPO(String fileId) { + FilePO filePO = null; + if (mongoTemplate != null) { + filePO = mongoTemplate.findOne(Query.query(Criteria.where("fileId").is(fileId)), FilePO.class, UPLOAD_FILE_COLLECTION_NAME); + } + if (filePO != null) { + return filePO; + } + return defaultFileService.getPO(fileId); + } + + @Override + public List listByUrl(String fileUrl) { + List fileDTOs = new ArrayList<>(); + if (mongoTemplate != null) { + Pattern pattern = Pattern.compile("^.*" + fileUrl + ".*$", Pattern.CASE_INSENSITIVE); + fileDTOs = mongoTemplate.find(Query.query(Criteria.where("fileUrl").regex(pattern)), FileDTO.class, UPLOAD_FILE_COLLECTION_NAME); + } + if (!fileDTOs.isEmpty()) { + return fileDTOs; + } + return defaultFileService.listByUrl(fileUrl); + } + /** * 上传文件到minIo @@ -222,6 +358,9 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi setAppSaveInfo(token, params); } fileDao.save(params); + if (mongoTemplate != null) { + mongoTemplate.insert(params, UPLOAD_FILE_COLLECTION_NAME); + } } /** @@ -238,6 +377,9 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi Map params = getFileParams(fileId, fileName, fileType, fileSize, bucketName); setSaveInfoByUserId(params, userId); fileDao.save(params); + if (mongoTemplate != null) { + mongoTemplate.insert(params, UPLOAD_FILE_COLLECTION_NAME); + } } private Map getFileParams(String fileId, String fileName, String fileType, long fileSize, String bucketName) {