diff --git a/src/main/java/im/zhaojun/common/controller/FileController.java b/src/main/java/im/zhaojun/common/controller/FileController.java index a18aaac..6ef9f35 100644 --- a/src/main/java/im/zhaojun/common/controller/FileController.java +++ b/src/main/java/im/zhaojun/common/controller/FileController.java @@ -133,4 +133,17 @@ public class FileController { end = Math.min(end, total); return new ArrayList<>(fileItemList.subList(start, end)); } + + + /** + * 获取指定路径下的文件信息内容 + * @param path 文件全路径 + * @return 该文件的名称, 路径, 大小, 下载地址等信息. + */ + @CheckStorageStrategyInit + @GetMapping("/directlink") + public ResultBean directlink(String path) { + AbstractFileService fileService = systemConfigService.getCurrentFileService(); + return ResultBean.successData(fileService.getFileItem(path)); + } } diff --git a/src/main/java/im/zhaojun/common/exception/GlobleExceptionHandler.java b/src/main/java/im/zhaojun/common/exception/GlobleExceptionHandler.java index da630e4..a76cad0 100644 --- a/src/main/java/im/zhaojun/common/exception/GlobleExceptionHandler.java +++ b/src/main/java/im/zhaojun/common/exception/GlobleExceptionHandler.java @@ -46,9 +46,9 @@ public class GlobleExceptionHandler { * 不存在的文件异常 */ @ExceptionHandler({NotExistFileException.class}) - @ResponseStatus(HttpStatus.NOT_FOUND) - public String notExistFile(Exception ex) { - return "error/404"; + @ResponseBody + public ResultBean notExistFile(Exception ex) { + return ResultBean.error("文件不存在"); } /** diff --git a/src/main/java/im/zhaojun/common/service/AbstractFileService.java b/src/main/java/im/zhaojun/common/service/AbstractFileService.java index fb27be2..76d135c 100644 --- a/src/main/java/im/zhaojun/common/service/AbstractFileService.java +++ b/src/main/java/im/zhaojun/common/service/AbstractFileService.java @@ -238,4 +238,6 @@ public abstract class AbstractFileService extends FileCacheService implements Fi cache.config().setRefreshPolicy(refreshPolicy); } + public abstract FileItemDTO getFileItem(String path); + } diff --git a/src/main/java/im/zhaojun/common/service/AbstractS3FileService.java b/src/main/java/im/zhaojun/common/service/AbstractS3FileService.java index 4ed2f87..604e328 100644 --- a/src/main/java/im/zhaojun/common/service/AbstractS3FileService.java +++ b/src/main/java/im/zhaojun/common/service/AbstractS3FileService.java @@ -6,6 +6,7 @@ import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; +import im.zhaojun.common.exception.NotExistFileException; import im.zhaojun.common.model.dto.FileItemDTO; import im.zhaojun.common.model.enums.FileTypeEnum; import im.zhaojun.common.util.StringUtils; @@ -113,4 +114,14 @@ public abstract class AbstractS3FileService extends AbstractFileService { String path = ObjectUtil.defaultIfNull(this.path, ""); return StringUtils.removeDuplicateSeparator(basePath + "/" + path); } + + @Override + public FileItemDTO getFileItem(String path) { + List list = fileList(path); + + if (list == null || list.size() == 0) { + throw new NotExistFileException(); + } + return list.get(0); + } } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/ftp/service/FtpServiceImpl.java b/src/main/java/im/zhaojun/ftp/service/FtpServiceImpl.java index 799ec93..3cf75de 100644 --- a/src/main/java/im/zhaojun/ftp/service/FtpServiceImpl.java +++ b/src/main/java/im/zhaojun/ftp/service/FtpServiceImpl.java @@ -90,4 +90,12 @@ public class FtpServiceImpl extends AbstractFileService implements FileService { public StorageTypeEnum getStorageTypeEnum() { return StorageTypeEnum.FTP; } + + @Override + public FileItemDTO getFileItem(String path) { + FileItemDTO fileItemDTO = new FileItemDTO(); + fileItemDTO.setUrl(getDownloadUrl(path)); + return fileItemDTO; + } + } diff --git a/src/main/java/im/zhaojun/local/service/LocalServiceImpl.java b/src/main/java/im/zhaojun/local/service/LocalServiceImpl.java index 6f2ebde..9b40d88 100644 --- a/src/main/java/im/zhaojun/local/service/LocalServiceImpl.java +++ b/src/main/java/im/zhaojun/local/service/LocalServiceImpl.java @@ -1,6 +1,7 @@ package im.zhaojun.local.service; import cn.hutool.core.util.URLUtil; +import im.zhaojun.common.exception.NotExistFileException; import im.zhaojun.common.model.StorageConfig; import im.zhaojun.common.model.SystemConfig; import im.zhaojun.common.model.constant.StorageConfigConstant; @@ -105,4 +106,26 @@ public class LocalServiceImpl extends AbstractFileService implements FileService return StorageTypeEnum.LOCAL; } + @Override + public FileItemDTO getFileItem(String path) { + String fullPath = StringUtils.concatPath(filePath, path); + + File file = new File(fullPath); + + if (!file.exists()) { + throw new NotExistFileException(); + } + + FileItemDTO fileItemDTO = new FileItemDTO(); + fileItemDTO.setType(file.isDirectory() ? FileTypeEnum.FOLDER : FileTypeEnum.FILE); + fileItemDTO.setTime(new Date(file.lastModified())); + fileItemDTO.setSize(file.length()); + fileItemDTO.setName(file.getName()); + fileItemDTO.setPath(filePath); + if (file.isFile()) { + fileItemDTO.setUrl(getDownloadUrl(path)); + } + + return fileItemDTO; + } } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/onedrive/service/OneDriveServiceImpl.java b/src/main/java/im/zhaojun/onedrive/service/OneDriveServiceImpl.java index 45e7c6f..41db601 100644 --- a/src/main/java/im/zhaojun/onedrive/service/OneDriveServiceImpl.java +++ b/src/main/java/im/zhaojun/onedrive/service/OneDriveServiceImpl.java @@ -1,6 +1,7 @@ package im.zhaojun.onedrive.service; import im.zhaojun.common.config.GlobalScheduleTask; +import im.zhaojun.common.exception.NotExistFileException; import im.zhaojun.common.model.StorageConfig; import im.zhaojun.common.model.constant.StorageConfigConstant; import im.zhaojun.common.model.dto.FileItemDTO; @@ -73,4 +74,14 @@ public class OneDriveServiceImpl extends AbstractFileService implements FileServ public StorageTypeEnum getStorageTypeEnum() { return StorageTypeEnum.ONE_DRIVE; } + + @Override + public FileItemDTO getFileItem(String path) { + List list = fileList(path); + + if (list == null || list.size() == 0) { + throw new NotExistFileException(); + } + return list.get(0); + } } diff --git a/src/main/java/im/zhaojun/upyun/service/UpYunServiceImpl.java b/src/main/java/im/zhaojun/upyun/service/UpYunServiceImpl.java index 7c5922d..3436368 100644 --- a/src/main/java/im/zhaojun/upyun/service/UpYunServiceImpl.java +++ b/src/main/java/im/zhaojun/upyun/service/UpYunServiceImpl.java @@ -3,6 +3,7 @@ package im.zhaojun.upyun.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.URLUtil; import com.UpYun; +import im.zhaojun.common.exception.NotExistFileException; import im.zhaojun.common.model.StorageConfig; import im.zhaojun.common.model.constant.StorageConfigConstant; import im.zhaojun.common.model.dto.FileItemDTO; @@ -108,4 +109,23 @@ public class UpYunServiceImpl extends AbstractFileService implements FileService return StorageTypeEnum.UPYUN; } + @Override + public FileItemDTO getFileItem(String path) { + List list; + try { + int end = path.lastIndexOf("/"); + list = fileList(path.substring(0, end)); + } catch (Exception e) { + throw new NotExistFileException(); + } + + for (FileItemDTO fileItemDTO : list) { + String fullPath = StringUtils.concatUrl(fileItemDTO.getPath(), fileItemDTO.getName()); + if (Objects.equals(fullPath, path)) { + return fileItemDTO; + } + } + + throw new NotExistFileException(); + } } \ No newline at end of file