diff --git a/src/main/java/im/zhaojun/common/controller/FileController.java b/src/main/java/im/zhaojun/common/controller/FileController.java index 8029f34..565ada3 100644 --- a/src/main/java/im/zhaojun/common/controller/FileController.java +++ b/src/main/java/im/zhaojun/common/controller/FileController.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.URLUtil; import im.zhaojun.common.annotation.CheckStorageStrategyInit; import im.zhaojun.common.exception.SearchDisableException; +import im.zhaojun.common.model.FilePageModel; import im.zhaojun.common.model.constant.ZFileConstant; import im.zhaojun.common.model.dto.FileItemDTO; import im.zhaojun.common.model.dto.ResultBean; @@ -16,21 +17,21 @@ import im.zhaojun.common.service.SystemService; import im.zhaojun.common.util.FileComparator; import im.zhaojun.common.util.HttpUtil; import im.zhaojun.common.util.StringUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.HttpClientErrorException; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * 前台文件管理 * @author zhaojun */ +@Slf4j @RequestMapping("/api") @RestController public class FileController { @@ -59,17 +60,34 @@ public class FileController { AbstractFileService fileService = systemConfigService.getCurrentFileService(); List fileItemList = fileService.fileList(StringUtils.removeDuplicateSeparator("/" + path + "/")); for (FileItemDTO fileItemDTO : fileItemList) { - if (ZFileConstant.PASSWORD_FILE_NAME.equals(fileItemDTO.getName()) - && !HttpUtil.getTextContent(fileItemDTO.getUrl()).equals(password)) { + if (ZFileConstant.PASSWORD_FILE_NAME.equals(fileItemDTO.getName())) { + String expectedPasswordContent = null; + try { + expectedPasswordContent = HttpUtil.getTextContent(fileItemDTO.getUrl() + '1'); + } catch (HttpClientErrorException httpClientErrorException) { + log.debug("尝试重新获取密码文件缓存中链接后仍失败", httpClientErrorException); + try { + String fullPath = StringUtils.removeDuplicateSeparator(fileItemDTO.getPath() + "/" + fileItemDTO.getName()); + FileItemDTO fileItem = fileService.getFileItem(fullPath); + expectedPasswordContent = HttpUtil.getTextContent(fileItem.getUrl()); + } catch (Exception e) { + log.debug("尝试重新获取密码文件链接后仍失败, 已暂时取消密码", e); + break; + } + } + + if (Objects.equals(expectedPasswordContent, password)) { + break; + } + if (password != null && !"".equals(password)) { - return ResultBean.error("密码错误."); + return ResultBean.error("密码错误.", ResultBean.INVALID_PASSWORD); } return ResultBean.error("此文件夹需要密码.", ResultBean.REQUIRED_PASSWORD); } } - List sortedPagingData = getSortedPagingData(fileItemList, page); - return ResultBean.successData(sortedPagingData); + return ResultBean.successData(getSortedPagingData(fileItemList, page)); } @@ -101,8 +119,7 @@ public class FileController { throw new SearchDisableException("搜索功能缓存预热中, 请稍后再试"); } List fileItemList = fileService.search(URLUtil.decode(name)); - List sortedPagingData = getSortedPagingData(fileItemList, page); - return ResultBean.successData(sortedPagingData); + return ResultBean.successData(getSortedPagingData(fileItemList, page)); } @@ -119,7 +136,7 @@ public class FileController { } - private List getSortedPagingData(List fileItemList, Integer page) { + private FilePageModel getSortedPagingData(List fileItemList, Integer page) { ArrayList copy = new ArrayList<>(Arrays.asList(new FileItemDTO[fileItemList.size()])); Collections.copy(copy, fileItemList); @@ -131,13 +148,13 @@ public class FileController { int totalPage = (total + PAGE_SIZE - 1) / PAGE_SIZE; if (page > totalPage) { - return new ArrayList<>(); + return new FilePageModel(total, totalPage, Collections.emptyList()); } int start = (page - 1) * PAGE_SIZE; int end = page * PAGE_SIZE; end = Math.min(end, total); - return new ArrayList<>(copy.subList(start, end)); + return new FilePageModel(total, totalPage, copy.subList(start, end)); } diff --git a/src/main/java/im/zhaojun/common/model/FilePageModel.java b/src/main/java/im/zhaojun/common/model/FilePageModel.java new file mode 100644 index 0000000..88d9de9 --- /dev/null +++ b/src/main/java/im/zhaojun/common/model/FilePageModel.java @@ -0,0 +1,22 @@ +package im.zhaojun.common.model; + +import im.zhaojun.common.model.dto.FileItemDTO; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +/** + * @author zhaojun + */ +@Data +@AllArgsConstructor +public class FilePageModel { + + private int total; + + private int totalPage; + + private List fileList; + +} diff --git a/src/main/java/im/zhaojun/common/model/dto/ResultBean.java b/src/main/java/im/zhaojun/common/model/dto/ResultBean.java index c52dcbc..f4d9e6a 100644 --- a/src/main/java/im/zhaojun/common/model/dto/ResultBean.java +++ b/src/main/java/im/zhaojun/common/model/dto/ResultBean.java @@ -15,12 +15,16 @@ public class ResultBean implements Serializable { public static final int REQUIRED_PASSWORD = -2; + public static final int INVALID_PASSWORD = -3; + private String msg = "操作成功"; private int code = SUCCESS; private Object data; + private int total; + private ResultBean() { super(); } @@ -43,6 +47,10 @@ public class ResultBean implements Serializable { return success("操作成功", data); } + public static ResultBean successPage(Object data, Long total) { + return success("操作成功", data); + } + public static ResultBean success(Object data) { return success("操作成功", data); }