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<String> 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<FileObjectVO> uploadFile(MultipartFile file, FileObjectDTO fileObjectDTO){
|
if (file != null ) {
|
return fileService.uploadFile(file, fileObjectDTO);
|
} else {
|
return R.fail("无上传的文件");
|
}
|
}
|
|
/**
|
* 在上传文件后,保存文件的信息
|
* @param fileObjectDTO 文件信息传输对象
|
* @return 文件信息显示对象
|
*/
|
@PostMapping("/saveFileAfterUpload")
|
public R<FileObjectVO> saveFileAfterUpload( @RequestBody FileObjectDTO fileObjectDTO){
|
return fileService.saveFileAfterUpload(fileObjectDTO);
|
}
|
|
/**
|
* 将原数据下的所有文件共享到其他的业务数据下
|
* @param shareDTO 文件分享
|
* @return 文件信息显示对象,是多个
|
*/
|
@PostMapping("/shareFiles")
|
public R<List<FileObjectVO>> shareFiles(@RequestBody FileShareDTO shareDTO){
|
return fileService.shareFiles(shareDTO);
|
}
|
|
|
/**
|
* 修改文件信息(不含文件),注意objectName和filePath不会变化
|
* @param fileDTOs 文件的数据对象
|
* @return 执行结果
|
*/
|
@PostMapping("/updateFileInfos")
|
public R updateFileInfos(@RequestBody Collection<FileObjectDTO> fileDTOs){
|
return fileService.updateFileInfos(fileDTOs);
|
}
|
|
/**
|
* 文件生效
|
* @param ids 文件的主键
|
* @return 执行结果
|
*/
|
@PutMapping("/releasedFiles")
|
public R releasedFiles(@RequestBody Collection<String> ids){
|
return fileService.releasedFiles(ids);
|
}
|
|
/**
|
* 批量指定文件业务数据后生效
|
* @param releaseDTOS 生效的相关信息
|
* @return 执行结果
|
*/
|
@PutMapping("/releasedFilesForOwn")
|
public R releasedFilesForOwn(@RequestBody Collection<FileReleaseDTO> releaseDTOS){
|
return fileService.releasedFilesForOwn(releaseDTOS);
|
}
|
|
|
/**
|
* 使用业务类型查询文件的信息,提供给页面调用
|
* @param fileQuery 查询对象
|
* @return 文件的显示对象
|
*/
|
@RequestMapping(value = "/listFiles",method = {RequestMethod.GET,RequestMethod.POST})
|
public R<IPage<FileObjectVO>> 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<FileObjectVO> listFilesByOids( Collection<String> oids){
|
return fileService.listFilesByOids(oids);
|
}
|
|
}
|