diff --git a/src/main/java/im/zhaojun/zfile/home/controller/FileController.java b/src/main/java/im/zhaojun/zfile/home/controller/FileController.java index f179671..50f3797 100644 --- a/src/main/java/im/zhaojun/zfile/home/controller/FileController.java +++ b/src/main/java/im/zhaojun/zfile/home/controller/FileController.java @@ -1 +1 @@ -package im.zhaojun.zfile.home.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSort; import im.zhaojun.zfile.admin.model.entity.StorageSource; import im.zhaojun.zfile.admin.service.StorageSourceService; import im.zhaojun.zfile.common.context.StorageSourceContext; import im.zhaojun.zfile.common.exception.InvalidStorageSourceException; import im.zhaojun.zfile.common.util.AjaxJson; import im.zhaojun.zfile.home.chain.FileChain; import im.zhaojun.zfile.home.chain.FileContext; import im.zhaojun.zfile.home.convert.StorageSourceConvert; import im.zhaojun.zfile.home.model.request.FileListRequest; import im.zhaojun.zfile.home.model.request.SearchStorageRequest; import im.zhaojun.zfile.home.model.result.FileInfoResult; import im.zhaojun.zfile.home.model.result.FileItemResult; import im.zhaojun.zfile.home.model.result.StorageSourceResult; import im.zhaojun.zfile.home.service.base.AbstractBaseFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; import java.util.List; /** * 文件列表相关接口, 如展示存储源列表, 展示文件列表, 搜索文件列表等. * * @author zhaojun */ @Api(tags = "文件列表模块") @ApiSort(2) @Slf4j @RequestMapping("/api/storage") @RestController public class FileController { @Resource private StorageSourceContext storageSourceContext; @Resource private StorageSourceService storageSourceService; @Resource private FileChain fileChain; @Resource private StorageSourceConvert storageSourceConvert; @ApiOperationSupport(order = 1) @ApiOperation(value = "获取存储源列表", notes = "获取所有已启用的存储源, 并且按照后台顺序排序") @GetMapping("/list") public AjaxJson> storageList() { List storageList = storageSourceService.findListByEnableOrderByOrderNum(); List storageSourceResultList = storageSourceConvert.entityToResultList(storageList); return AjaxJson.getSuccessData(storageSourceResultList); } @ApiOperationSupport(order = 2) @ApiOperation(value = "获取文件列表", notes = "获取某个存储源下, 指定路径的文件&文件夹列表") @PostMapping("/files") public AjaxJson list(@Valid @RequestBody FileListRequest fileListRequest) throws Exception { StorageSource storageSource = storageSourceService.findByStorageKey(fileListRequest.getStorageKey()); if (storageSource == null) { throw new InvalidStorageSourceException("存储源不存在"); } Integer storageId = storageSource.getId(); // 处理请求参数默认值 fileListRequest.handleDefaultValue(); // 获取文件列表 AbstractBaseFileService fileService = storageSourceContext.get(storageId); List fileItemList = fileService.fileList(fileListRequest.getPath()); // 执行责任链 FileContext fileContext = FileContext.builder() .storageId(storageId) .fileListRequest(fileListRequest) .fileItemList(fileItemList).build(); fileChain.execute(fileContext); return AjaxJson.getSuccessData(new FileInfoResult(fileContext.getFileItemList(), fileContext.getPasswordPattern())); } @ApiOperationSupport(order = 3) @ApiOperation(value = "搜索文件", notes = "搜索指定存储源下的文件和文件夹") @PostMapping("/search") public AjaxJson> search(@Valid @RequestBody SearchStorageRequest searchStorageRequest) { AbstractBaseFileService fileService = storageSourceContext.getByKey(searchStorageRequest.getStorageKey()); List search = fileService.search(searchStorageRequest.getSearchVal()); return AjaxJson.getSuccessData(search); } } \ No newline at end of file +package im.zhaojun.zfile.home.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSort; import im.zhaojun.zfile.admin.model.entity.StorageSource; import im.zhaojun.zfile.admin.service.StorageSourceService; import im.zhaojun.zfile.common.context.StorageSourceContext; import im.zhaojun.zfile.common.exception.InvalidStorageSourceException; import im.zhaojun.zfile.common.util.AjaxJson; import im.zhaojun.zfile.home.chain.FileChain; import im.zhaojun.zfile.home.chain.FileContext; import im.zhaojun.zfile.home.convert.StorageSourceConvert; import im.zhaojun.zfile.home.model.request.FileItemRequest; import im.zhaojun.zfile.home.model.request.FileListRequest; import im.zhaojun.zfile.home.model.result.FileInfoResult; import im.zhaojun.zfile.home.model.result.FileItemResult; import im.zhaojun.zfile.home.model.result.StorageSourceResult; import im.zhaojun.zfile.home.service.base.AbstractBaseFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; import java.util.List; /** * 文件列表相关接口, 如展示存储源列表, 展示文件列表, 搜索文件列表等. * * @author zhaojun */ @Api(tags = "文件列表模块") @ApiSort(2) @Slf4j @RequestMapping("/api/storage") @RestController public class FileController { @Resource private StorageSourceContext storageSourceContext; @Resource private StorageSourceService storageSourceService; @Resource private FileChain fileChain; @Resource private StorageSourceConvert storageSourceConvert; @ApiOperationSupport(order = 1) @ApiOperation(value = "获取存储源列表", notes = "获取所有已启用的存储源, 并且按照后台顺序排序") @GetMapping("/list") public AjaxJson> storageList() { List storageList = storageSourceService.findListByEnableOrderByOrderNum(); List storageSourceResultList = storageSourceConvert.entityToResultList(storageList); return AjaxJson.getSuccessData(storageSourceResultList); } @ApiOperationSupport(order = 2) @ApiOperation(value = "获取文件列表", notes = "获取某个存储源下, 指定路径的文件&文件夹列表") @PostMapping("/files") public AjaxJson list(@Valid @RequestBody FileListRequest fileListRequest) throws Exception { StorageSource storageSource = storageSourceService.findByStorageKey(fileListRequest.getStorageKey()); if (storageSource == null) { throw new InvalidStorageSourceException("存储源不存在"); } Integer storageId = storageSource.getId(); // 处理请求参数默认值 fileListRequest.handleDefaultValue(); // 获取文件列表 AbstractBaseFileService fileService = storageSourceContext.get(storageId); List fileItemList = fileService.fileList(fileListRequest.getPath()); // 执行责任链 FileContext fileContext = FileContext.builder() .storageId(storageId) .fileListRequest(fileListRequest) .fileItemList(fileItemList).build(); fileChain.execute(fileContext); return AjaxJson.getSuccessData(new FileInfoResult(fileContext.getFileItemList(), fileContext.getPasswordPattern())); } @ApiOperationSupport(order = 3) @ApiOperation(value = "获取单个文件信息", notes = "获取某个存储源下, 单个文件的信息") @PostMapping("/file/item") public AjaxJson fileItem(@Valid @RequestBody FileItemRequest fileItemRequest) { StorageSource storageSource = storageSourceService.findByStorageKey(fileItemRequest.getStorageKey()); if (storageSource == null) { throw new InvalidStorageSourceException("存储源不存在"); } Integer storageId = storageSource.getId(); // 处理请求参数默认值 fileItemRequest.handleDefaultValue(); // 获取文件列表 AbstractBaseFileService fileService = storageSourceContext.get(storageId); FileItemResult fileItemResult; try { fileItemResult = fileService.getFileItem(fileItemRequest.getPath()); } catch (Exception e) { return AjaxJson.getError("获取文件信息失败: " + e.getMessage()); } return AjaxJson.getSuccessData(fileItemResult); } } \ No newline at end of file