package jnpf.upload.controller; import feign.Response; import jnpf.entity.FileParameter; import jnpf.file.FileUploadApi; import jnpf.model.FileListVO; import jnpf.model.upload.UploadFileModel; import jnpf.util.*; import lombok.RequiredArgsConstructor; import org.dromara.x.file.storage.core.FileInfo; import org.dromara.x.file.storage.core.FileStorageService; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.LinkedList; import java.util.List; /** * 文件上传类 * * @author JNPF开发平台组 * @version V3.1.0 * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com) * @date 2021-07-20 */ @RequestMapping(value = "/upload") @RestController @RequiredArgsConstructor public class FileUploadController implements FileUploadApi { private final FileStorageService fileStorageService; /** * 文件上传 * * @param multipartFile * @param folderName * @param fileName * @return */ @Override @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public FileInfo uploadFile(@RequestPart("multipartFile") MultipartFile multipartFile, @RequestParam("folderName") String folderName, @RequestParam("fileName") String fileName) { //根据文件保存类型选择对应的方法 try { return FileUploadUtils.uploadFile(new FileParameter(folderName, fileName), multipartFile); } catch (Exception e) { return null; } } @Override @PostMapping(value = "/replaceFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public boolean replaceFile(@RequestPart("multipartFile") MultipartFile multipartFile, @RequestParam("folderName") String folderName, @RequestParam("fileName") String fileName) { try { FileInfo fileInfo = fileStorageService.of(multipartFile) .setPath(folderName) .setOriginalFilename(fileName) .setSaveFilename(fileName) .upload(); return fileInfo != null && fileName.equals(fileInfo.getFilename()); } catch (Exception e) { return false; } } @Override @NoDataSourceBind @GetMapping(value = "/getByte/{fileName}/{folderName}") public byte[] getByte(@PathVariable("fileName") String fileName, @PathVariable("folderName") String folderName) { return FileUploadUtils.downloadFile(new FileParameter(folderName, fileName)); } @Override @NoDataSourceBind @GetMapping(value = "/listFiles") public List getFileList(@RequestParam("folderName") String folderName) { List data = new LinkedList<>(); List fileList = FileUploadUtils.getFileList(new FileParameter().setRemotePath(folderName).setRecursive(true)); for (int i = 0; i < fileList.size(); i++) { FileListVO fileDetail = fileList.get(i); FileListVO fileModel = new FileListVO(); fileModel.setFileId(i + ""); fileModel.setFileType(fileDetail.getFileType()); fileModel.setFileName(fileDetail.getFileName()); fileModel.setFileTime(fileDetail.getFileTime()); fileModel.setFileSize(fileDetail.getFileSize() == null ? "0" : String.valueOf(fileDetail.getFileSize())); data.add(fileModel); } return data; } @Override @NoDataSourceBind @PostMapping("/downFile") public Response downFile(@RequestBody UploadFileModel model) { try { FileUploadUtils.downloadFile(new FileParameter(model.getFolderName(), model.getObjectName()), ServletUtil.getResponse().getOutputStream()); } catch (IOException e) { throw new IllegalArgumentException(e); } return null; } @Override @GetMapping("/getFile/{fileId}") public FileInfo getFile(@PathVariable("fileId") String fileId) { return null; } @Override @GetMapping("/getDefaultPlatform") public String getDefaultPlatform() { return FileUploadUtils.getDefaultPlatform(); } @Override @GetMapping("/getVisualList") public List getVisualList(@RequestParam("folderName") String folderName){ return FileUploadUtils.getFileList(new FileParameter().setRemotePath(folderName).setRecursive(true)); } }