package com.vci.ubcs.resource.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.vci.ubcs.resource.dto.FileObjectDTO; import com.vci.ubcs.resource.dto.FileReleaseDTO; import com.vci.ubcs.resource.dto.FileShareDTO; import com.vci.ubcs.resource.query.FileQuery; import com.vci.ubcs.resource.service.IFileService; import com.vci.ubcs.resource.utils.FileDownloadUtil; import com.vci.ubcs.resource.vo.FileObjectVO; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.web.util.ControllerUtil; import com.vci.ubcs.starter.web.util.LangBaseUtil; import com.vci.ubcs.starter.web.util.VciBaseUtil; import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Query; import org.springblade.core.oss.MinioTemplate; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.List; /** * 文件控制器 * @author weidy * @date 2023-6/9 */ @RestController() @RequestMapping("/fileController") @Slf4j public class FileController { /** * 文件服务 */ @Autowired private IFileService fileService; /** * 根据文件主键下载文件 * @param fileOids 文件的主键 * @param response 响应的对象 * @return 执行结果,只有下载失败的时候才会这样 */ @RequestMapping(value = "/downloadFilesByOids",method = {RequestMethod.GET,RequestMethod.POST}) public String downloadFilesByOids(@RequestParam String fileOids, HttpServletResponse response){ try{ FileDownloadUtil.downloadFile(response, fileService.downloadFileByOids(VciBaseUtil.str2List(fileOids))); }catch (Throwable e){ return JSON.toJSONString(R.fail(LangBaseUtil.getErrorMsg(e))); } //因为设置了响应contentType,所以这儿不能再直接返回R了,可能会导致报错 return JSON.toJSONString(R.success("下载完成")) ; } /** * 文件删除 * @param oids 文件的主键 * @return 文件内容 */ @DeleteMapping("/deleteFile") public R deleteFile(@RequestBody Collection oids){ try { fileService.deleteFiles(oids); }catch (Throwable e){ //如果出错,把错误信息写到text String msg = LangBaseUtil.getErrorMsg(e); if(StringUtil.isBlank(msg)){ msg = "未知错误"; } log.debug(msg); return R.fail(msg); } return R.success("删除成功"); } /** * 前端页面单文件上传。(先数据,后文件模式上传) * @param file 上传的文件 * @param fileObjectDTO 文件信息传输对象 * @return 文件信息显示对象 */ @PostMapping("/uploadFile") public R uploadFile(MultipartFile file, FileObjectDTO fileObjectDTO){ if (file != null ) { return fileService.uploadFile(file, fileObjectDTO); } else { return R.fail("无上传的文件"); } } /** * 在上传文件后,保存文件的信息 * @param fileObjectDTO 文件信息传输对象 * @return 文件信息显示对象 */ @PostMapping("/saveFileAfterUpload") public R saveFileAfterUpload( @RequestBody FileObjectDTO fileObjectDTO){ return fileService.saveFileAfterUpload(fileObjectDTO); } /** * 将原数据下的所有文件共享到其他的业务数据下 * @param shareDTO 文件分享 * @return 文件信息显示对象,是多个 */ @PostMapping("/shareFiles") public R> shareFiles(@RequestBody FileShareDTO shareDTO){ return fileService.shareFiles(shareDTO); } /** * 修改文件信息(不含文件),注意objectName和filePath不会变化 * @param fileDTOs 文件的数据对象 * @return 执行结果 */ @PostMapping("/updateFileInfos") public R updateFileInfos(@RequestBody Collection fileDTOs){ return fileService.updateFileInfos(fileDTOs); } /** * 文件生效 * @param ids 文件的主键 * @return 执行结果 */ @PutMapping("/releasedFiles") public R releasedFiles(@RequestBody Collection ids){ return fileService.releasedFiles(ids); } /** * 批量指定文件业务数据后生效 * @param releaseDTOS 生效的相关信息 * @return 执行结果 */ @PutMapping("/releasedFilesForOwn") public R releasedFilesForOwn(@RequestBody Collection releaseDTOS){ return fileService.releasedFilesForOwn(releaseDTOS); } /** * 使用业务类型查询文件的信息,提供给页面调用 * @param fileQuery 查询对象 * @return 文件的显示对象 */ @RequestMapping(value = "/listFiles",method = {RequestMethod.GET,RequestMethod.POST}) public R> listFiles(FileQuery fileQuery, Query query){ return R.data(fileService.listFiles(fileQuery,query)); } /** * 使用文件主键获取对象 * @param oid 主键 * @return 文件显示对象 */ @GetMapping("/get") public FileObjectVO get(String oid){ return fileService.get(oid); } /** * 使用文件的主键批量获取对象 * @param oids 文件的主键集合 * @return 文件的显示信息 */ @GetMapping("/listFilesByOids") public List listFilesByOids( Collection oids){ return fileService.listFilesByOids(oids); } }