From e4d0113d214e05dbb6a36a111bc125202ddfd1ed Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期四, 06 三月 2025 10:54:46 +0800 Subject: [PATCH] Merge branch 'xizang-changyun' of https://gitee.com/xiaochen991015/xizang --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java | 155 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 148 insertions(+), 7 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java index 0702deb..6aa9856 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java @@ -1,19 +1,33 @@ package com.ruoyi.web.controller.api; +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.config.FileUploadConfig; +import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.model.TFile; +import com.ruoyi.system.service.SysFileService; +import com.ruoyi.system.service.impl.SysFileServiceImpl; import com.ruoyi.web.controller.tool.TencentCosUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.io.OutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; /** * @author HJL @@ -23,18 +37,145 @@ @RestController @RequestMapping("/cos") @Api(tags = "公共-文件上传") +@Slf4j public class COSController { @Resource private TencentCosUtil tencentCosUtil; + @Autowired + SysFileService sysFileService; + + @Autowired + FileUploadConfig fileUploadConfig; + + @Autowired + TokenService tokenService; + + public String getLocalUrlPrefix(){ + ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()); + if (servletRequestAttributes==null || servletRequestAttributes.getRequest()==null){ + return fileUploadConfig.getFileUrlPrefix(); + } + HttpServletRequest request = servletRequestAttributes.getRequest(); + StringBuffer url = new StringBuffer(); + url.append(request.getScheme()).append("://") + .append(request.getServerName()) + .append((request.getServerPort() == 80 ? "" : ":" + request.getServerPort())) + .append(request.getContextPath()); + return url.toString(); + } + + public String getLocalFileUrlPrefix(String fileId){ + String token = tokenService.getLoginUser().getToken(); + StringBuffer url = new StringBuffer(); + url.append(getLocalUrlPrefix()) + .append("/cos/get/").append(fileId).append("?s=").append(URLEncoder.encode(token)) + ; + return url.toString(); + } + + + + + + + public static void failResponse(String message){ + ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()); + HttpServletResponse response = servletRequestAttributes.getResponse(); + String failResult = JSON.toJSONString(R.fail(message)); + //设置编码格式 + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json;charset=UTF-8"); + PrintWriter pw = null; + try { + pw = response.getWriter(); + pw.write(failResult); + pw.flush(); + } catch (IOException e) { + log.error("io异常"); + }finally { + if (pw!=null) { + pw.close(); + } + } + + } + @Autowired + private RedisCache redisCache; + + @GetMapping("get/{fileId}") + public void get(@PathVariable("fileId") String fileid,@RequestParam("s") String s){ + if (StringUtils.isEmpty(fileid)){ + failResponse("文件ID不能为空"); + return; + } + if (StringUtils.isEmpty(s)){ + failResponse("token不能为空"); + return; + } + Object object = redisCache.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + s); + if (object==null){ + failResponse("用户登录已失效"); + return; + } + TFile file = sysFileService.getById(fileid); + if (file==null){ + failResponse("图片不存在"); + return; + } + tencentCosUtil.download(file); + } + + + @GetMapping("get/file") + public void getFile(@RequestParam("fileUrl") String fileUrl,@RequestParam("s") String s){ + if (StringUtils.isEmpty(fileUrl)){ + failResponse("文件路径不能为空"); + return; + } + if (StringUtils.isEmpty(s)){ + failResponse("token不能为空"); + return; + } + Object object = redisCache.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + s); + if (object==null){ + failResponse("用户登录已失效"); + return; + } + tencentCosUtil.download(fileUrl); + } + + /** + * 新上传接口,下一版更新 + * @param file + * @param folder 上传到cos的文件目录:如/contract/ + * @return + */ + @PostMapping("/uploadnew") + @ApiOperation(value = "文件上传,带上传目录,返回文件ID", tags = "公共-文件上传") + @ApiImplicitParams({ + @ApiImplicitParam(value = "文件", name = "file", dataType = "MultipartFile", required = true) + }) + public R<TFile> uploadnew(@RequestParam("file") MultipartFile file, @RequestParam("folder") String folder) { + TFile tFile = tencentCosUtil.upload(file,folder); + tFile.setFileUrl(getLocalFileUrlPrefix(tFile.getId())); + return R.ok(tFile); + } + + /** + * + * @param file + * @param + * @return + */ @PostMapping("/upload") @ApiOperation(value = "文件上传", tags = "公共-文件上传") @ApiImplicitParams({ @ApiImplicitParam(value = "文件", name = "file", dataType = "MultipartFile", required = true) }) - public R<String> upload(@RequestParam("file") MultipartFile file) { - String url = tencentCosUtil.upLoadFile(file); + public R<String> upload(@RequestParam("file") MultipartFile file,@RequestParam("folder") String folder) { + String url = tencentCosUtil.upLoadFile(file,folder); return R.ok(url, url); } @PostMapping("/downloadImg") -- Gitblit v1.7.1