From 1bda8a99578d643667b58f3b1498576a5412e081 Mon Sep 17 00:00:00 2001 From: haozq <1611483981@qq.com> Date: Thu, 11 Sep 2025 13:13:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DownloadController.java | 113 ++++++++++++++++++ .../business/domain/ProductScreenVo.java | 51 ++++++++ .../com/bonus/business/domain/TbProduct.java | 4 + .../business/mapper/ProductScreenMapper.java | 7 ++ .../service/impl/ProductScreenImpl.java | 18 ++- .../mapper/business/ProductScreenMapper.xml | 11 ++ 6 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 bonus-business/src/main/java/com/bonus/business/controller/DownloadController.java create mode 100644 bonus-business/src/main/java/com/bonus/business/domain/ProductScreenVo.java diff --git a/bonus-business/src/main/java/com/bonus/business/controller/DownloadController.java b/bonus-business/src/main/java/com/bonus/business/controller/DownloadController.java new file mode 100644 index 0000000..f51d60a --- /dev/null +++ b/bonus-business/src/main/java/com/bonus/business/controller/DownloadController.java @@ -0,0 +1,113 @@ +package com.bonus.business.controller; + +import com.bonus.common.config.MinioConfig; +import com.bonus.common.utils.StringUtils; +import com.bonus.file.minio.MinioUtil; +import io.minio.GetObjectArgs; +import io.minio.MinioClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; + +/** + * 下载指定路径下的文件 + * */ +@RestController +@Slf4j +@RequestMapping("/system/files/") +public class DownloadController { + + @Resource + private MinioConfig minioConfig; + + @Autowired + public MinioUtil minioUtil; + + @Resource + private MinioClient minioClient; + /** + * 下载文件 根据文件名 + * @param filePath + * @param response + */ + @GetMapping("/download") + public void download(@RequestParam(name = "filePath") String filePath, + HttpServletResponse response){ + try { + if(StringUtils.isNotEmpty(filePath)){ + if(filePath.startsWith(minioConfig.getUrl())){ + filePath=filePath.replace(minioConfig.getUrl()+"/"+minioConfig.getBucketName(),"").trim(); + } + fileDownload(filePath,minioConfig.getBucketName(),response); + }else{ + System.err.println("文件路径为空"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + /** + * 下载文件 + * @param fileName + * @param bucketName + * @param response + */ + public void fileDownload(String fileName, + String bucketName, + HttpServletResponse response) { + InputStream inputStream = null; + OutputStream outputStream = null; + try { + if (StringUtils.isBlank(fileName)) { + response.setHeader("Content-type", "text/html;charset=UTF-8"); + String data = "文件下载失败"; + OutputStream ps = response.getOutputStream(); + ps.write(data.getBytes("UTF-8")); + return; + } + outputStream = response.getOutputStream(); + // 获取文件对象 + inputStream= minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + byte[] buf = new byte[1024]; + int length = 0; + response.reset(); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(fileName.substring(fileName.lastIndexOf("/") + 1), "UTF-8")); + response.setContentType("application/octet-stream"); + response.setCharacterEncoding("UTF-8"); + // 输出文件 + while ((length = inputStream.read(buf)) > 0) { + outputStream.write(buf, 0, length); + } + System.out.println("下载成功"); + inputStream.close(); + } catch (Throwable ex) { + response.setHeader("Content-type", "text/html;charset=UTF-8"); + String data = "文件下载失败"; + try { + OutputStream ps = response.getOutputStream(); + ps.write(data.getBytes("UTF-8")); + }catch (IOException e){ + e.printStackTrace(); + } + } finally { + try { + outputStream.close(); + if (inputStream != null) { + inputStream.close(); + }}catch (IOException e){ + e.printStackTrace(); + } + } + } + +} diff --git a/bonus-business/src/main/java/com/bonus/business/domain/ProductScreenVo.java b/bonus-business/src/main/java/com/bonus/business/domain/ProductScreenVo.java new file mode 100644 index 0000000..378a737 --- /dev/null +++ b/bonus-business/src/main/java/com/bonus/business/domain/ProductScreenVo.java @@ -0,0 +1,51 @@ +package com.bonus.business.domain; + +import lombok.Data; + +@Data +public class ProductScreenVo { + + private String id; + /** + * 类型id + */ + private String typeId; + /** + * 类型名称 + */ + private String typeName; + /** + * 名称 + */ + private String name; + /** + * 版本 + */ + private String version; + /** + * 迷哦奥数 + */ + private String description; + /** + * 背景图 + */ + private String image; + /** + * 文件类型 + */ + private String fileType; + /** + * 文件路径 + */ + private String filePath; + /** + * 源文件名称 + */ + private String originalName; + /** + * 桶名称 + */ + private String bucketName; + + private String url; +} diff --git a/bonus-business/src/main/java/com/bonus/business/domain/TbProduct.java b/bonus-business/src/main/java/com/bonus/business/domain/TbProduct.java index bce5568..90b5d13 100644 --- a/bonus-business/src/main/java/com/bonus/business/domain/TbProduct.java +++ b/bonus-business/src/main/java/com/bonus/business/domain/TbProduct.java @@ -98,5 +98,9 @@ public class TbProduct extends BaseEntity private ProductCaseImage image; + private List videoList; + + private List fileList; + } diff --git a/bonus-business/src/main/java/com/bonus/business/mapper/ProductScreenMapper.java b/bonus-business/src/main/java/com/bonus/business/mapper/ProductScreenMapper.java index 3539c10..c0d9f7c 100644 --- a/bonus-business/src/main/java/com/bonus/business/mapper/ProductScreenMapper.java +++ b/bonus-business/src/main/java/com/bonus/business/mapper/ProductScreenMapper.java @@ -1,5 +1,6 @@ package com.bonus.business.mapper; +import com.bonus.business.domain.ProductScreenVo; import com.bonus.business.domain.TbProduct; import com.bonus.business.domain.TbProductCase; import org.apache.ibatis.annotations.Mapper; @@ -18,4 +19,10 @@ public interface ProductScreenMapper { */ TbProduct getProductDetails(TbProduct product); + /** + * + * @param vo + * @return + */ + List getMaterialList(TbProduct vo); } diff --git a/bonus-business/src/main/java/com/bonus/business/service/impl/ProductScreenImpl.java b/bonus-business/src/main/java/com/bonus/business/service/impl/ProductScreenImpl.java index bac3841..b12211a 100644 --- a/bonus-business/src/main/java/com/bonus/business/service/impl/ProductScreenImpl.java +++ b/bonus-business/src/main/java/com/bonus/business/service/impl/ProductScreenImpl.java @@ -1,6 +1,7 @@ package com.bonus.business.service.impl; import com.bonus.business.domain.ProductCaseImage; +import com.bonus.business.domain.ProductScreenVo; import com.bonus.business.domain.TbProduct; import com.bonus.business.domain.TbProductCase; import com.bonus.business.mapper.ProductMapper; @@ -68,8 +69,21 @@ public class ProductScreenImpl implements ProductScreenService { } } //查询 宣传手册和宣传视频 - - + List list=mapper.getMaterialList(vo); + List videoList=new ArrayList<>(); + List fileList=new ArrayList<>(); + if(StringUtils.isNotEmpty(list)){ + list.forEach(vo1->{ + vo1.setUrl(minioConfig.getUrl()+"/"+minioConfig.getBucketName()+vo1.getFilePath()); + if("0".equals(vo1.getFileType())){ + videoList.add(vo1); + }else { + fileList.add(vo1); + } + }); + vo.setVideoList(videoList); + vo.setFileList(fileList); + } } }catch (Exception e){ log.error(e.toString()); diff --git a/bonus-business/src/main/resources/mapper/business/ProductScreenMapper.xml b/bonus-business/src/main/resources/mapper/business/ProductScreenMapper.xml index f336c02..818a16f 100644 --- a/bonus-business/src/main/resources/mapper/business/ProductScreenMapper.xml +++ b/bonus-business/src/main/resources/mapper/business/ProductScreenMapper.xml @@ -25,4 +25,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sys_dict_data sdd on sdd.dict_value=tpt.type_id and sdd.dict_type='tb_product_type' where tpt.id=#{id} + \ No newline at end of file