派生自 projectDept/qhighschool

111
EricsHu
2023-05-24 58a1078809f129905ae30e676c8705e2a083e2ec
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
package com.qxueyou.scc.controller;
 
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
 
//import cn.hutool.core.io.FileUtil;
import com.obs.services.exception.ObsException;
import com.obs.services.model.PutObjectResult;
import com.qxueyou.scc.base.model.FileMeta;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.teach.res.service.HweiYunOBSService;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
 
/**
 * @ClassName: ObsController
 * @Description: OBS服务器Controller
 * @Author: wuhuiju
 * @Date: 2021-12-21 15:20
 * @Version: 1.0
 */
@RestController
@RequestMapping("/file")// @RequestMapping("/file")
public class HweiYunOBSController {
 
    @Resource
    private HweiYunOBSService hweiYunOBSService;
 
    @RequestMapping(value = "upload", method = RequestMethod.POST)
    public List<FileMeta> save(@RequestParam(value = "file", required = false) MultipartFile file) {
 
        if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) {
            return null;
        }
//        if (FileUtil.isEmpty(file)) {
//            return new Result(false,"文件为空");
//        }
        final List<FileMeta> test = hweiYunOBSService.fileUpload(file, file.getOriginalFilename());
//        return ResponseVO.ok("执行成功",test);
        return test;
    }
 
    @RequestMapping(value = "delete", method = RequestMethod.POST)
    public Result delete(@RequestParam(value = "fileName", required = false)  String fileName) {
        if (StrUtil.isEmpty(fileName)) {
            return new Result(false,"删除文件为空");
        }
        final boolean delete = hweiYunOBSService.delete(fileName);
        return delete?new Result(true,"success"):new Result(false,"删除失败");
    }
 
    @RequestMapping(value = "deletes", method = RequestMethod.POST)
    //@RequestParam 获取List,数组则不需要
    public Result delete(@RequestParam("fileNames") List<String> fileNames) {
        if (ArrayUtil.isEmpty(fileNames)) {
            return new Result(false,"删除文件为空");
        }
        final boolean delete = hweiYunOBSService.delete(fileNames);
        return delete?new Result(true,"success"):new Result(false,"删除失败");
    }
 
 
    @RequestMapping(value = "download", method = RequestMethod.POST)
    public Result download(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "fileName", required = false) String fileName) {
        if (StrUtil.isEmpty(fileName)) {
            return new Result(false,"下载文件为空");
        }
        try (
                InputStream inputStream = hweiYunOBSService.fileDownload(fileName);
             BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream())){
            if(inputStream == null) {
                return new Result(false);
            }
            // 为防止 文件名出现乱码
            final String userAgent = request.getHeader("USER-AGENT");
            // IE浏览器
            if (StrUtil.contains(userAgent, "MSIE")) {
                fileName = URLEncoder.encode(fileName, "UTF-8");
            } else {
                // google,火狐浏览器
                if (StrUtil.contains(userAgent, "Mozilla")) {
                    fileName = new String(fileName.getBytes(), "ISO8859-1");
                } else {
                    // 其他浏览器
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                }
            }
            response.setContentType("application/x-download");
            // 设置让浏览器弹出下载提示框,而不是直接在浏览器中打开
            response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
            IoUtil.copy(inputStream, outputStream);
            return null;
        } catch (IOException | ObsException e) {
            return new Result(false);
        }
    }
}