ludc
2023-11-08 cd5a0765ea6a842852e460cc1bde6ad2b2fd6e93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
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);
    }
 
}