diff --git a/src/main/java/com/spring/modules/oss/controller/OssController.java b/src/main/java/com/spring/modules/oss/controller/OssController.java new file mode 100644 index 00000000..b94e3661 --- /dev/null +++ b/src/main/java/com/spring/modules/oss/controller/OssController.java @@ -0,0 +1,44 @@ +package com.spring.modules.oss.controller; + + +import com.spring.common.utils.R; +import com.spring.modules.oss.entity.SysOssEntity; +import com.spring.modules.oss.service.SysOssService; +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.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("/oss") +public class OssController { + + @Autowired + private SysOssService sysOssService; + + @PostMapping("/upload") + public R upload(@RequestParam("file") List files,@ModelAttribute SysOssEntity oss){ + sysOssService.upload(files,oss); + return R.ok("操作成功"); + } + + @PostMapping("/remove") + public R removeOssFile(@RequestBody List ids){ + sysOssService.removeOssFile(ids); + return R.ok("操作成功"); + } + + @PostMapping + public R queryOssFile(@RequestBody SysOssEntity oss){ + List list = sysOssService.queryOssFile(oss); + return R.ok().put("rows",list); + } + + @PostMapping("/{id}") + public void previewOssFileById(@PathVariable("id") Integer id, HttpServletResponse response){ + sysOssService.previewOssFileById(id,response); + } +} diff --git a/src/main/java/com/spring/modules/oss/controller/SysOssController.java b/src/main/java/com/spring/modules/oss/controller/SysOssController.java index 06601324..452cfabb 100644 --- a/src/main/java/com/spring/modules/oss/controller/SysOssController.java +++ b/src/main/java/com/spring/modules/oss/controller/SysOssController.java @@ -36,7 +36,7 @@ import java.util.Map; * */ @RestController -@RequestMapping("sys/oss") +@RequestMapping("/sys/oss") public class SysOssController extends AbstractController { @Autowired private SysOssService sysOssService; diff --git a/src/main/java/com/spring/modules/oss/service/SysOssService.java b/src/main/java/com/spring/modules/oss/service/SysOssService.java index 7875edb2..43a90616 100644 --- a/src/main/java/com/spring/modules/oss/service/SysOssService.java +++ b/src/main/java/com/spring/modules/oss/service/SysOssService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.spring.common.utils.PageUtils; import com.spring.modules.oss.entity.SysOssEntity; import com.spring.modules.oss.vo.SysOssEntityData; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -42,4 +43,11 @@ public interface SysOssService extends IService { **/ void updateOssRef(SysOssEntity sysOssEntity); + void upload(List files, SysOssEntity oss); + + void removeOssFile(List ids); + + List queryOssFile(SysOssEntity oss); + + void previewOssFileById(Integer id,HttpServletResponse response); } diff --git a/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java b/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java index 046b0811..ea0f05e7 100644 --- a/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java +++ b/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java @@ -10,17 +10,21 @@ import com.spring.modules.oss.service.SysOssService; import com.spring.modules.oss.vo.OssVo; import com.spring.modules.oss.vo.SysOssEntityData; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -28,35 +32,150 @@ import java.util.zip.ZipOutputStream; @Service("sysOssService") public class SysOssServiceImpl extends ServiceImpl implements SysOssService { - @Override - public PageUtils queryPage(Map params) { - String fileName = (String)params.get("fileName"); - String fileType = (String)params.get("fileType"); - String orderRef1 = (String)params.get("orderRef1"); - String orderRef2 = (String)params.get("orderRef2"); - String orderRef3 = (String)params.get("orderRef3"); - long page = Long.valueOf(params.get("page").toString()); - long limit = Long.valueOf(params.get("limit").toString()); - IPage pageData = this.baseMapper.queryPage( new Page(page, limit),params); - return new PageUtils(pageData); - } - - @Override - public List getSysOssEntityList(SysOssEntityData sysOssEntityData) { - return this.baseMapper.getSysOssEntityList(sysOssEntityData); - } - - - @Override - public void updateOssRef(SysOssEntity sysOssEntity) { - lambdaUpdate() - .set(StringUtils.isNotEmpty(sysOssEntity.getFileType()),SysOssEntity::getFileType,sysOssEntity.getFileType()) - .set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef1()),SysOssEntity::getOrderRef1,sysOssEntity.getOrderRef1()) - .set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef2()),SysOssEntity::getOrderRef2,sysOssEntity.getOrderRef2()) - .set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef3()),SysOssEntity::getOrderRef3,sysOssEntity.getOrderRef3()) - .set(StringUtils.isNotEmpty(sysOssEntity.getFileSuffix()),SysOssEntity::getFileSuffix,sysOssEntity.getFileSuffix()) - .set(sysOssEntity.getFileTypeCode()!=null,SysOssEntity::getFileTypeCode,sysOssEntity.getFileTypeCode()) - .eq(SysOssEntity::getId,sysOssEntity.getId()) - .update(); - } + @Override + public PageUtils queryPage(Map params) { + String fileName = (String) params.get("fileName"); + String fileType = (String) params.get("fileType"); + String orderRef1 = (String) params.get("orderRef1"); + String orderRef2 = (String) params.get("orderRef2"); + String orderRef3 = (String) params.get("orderRef3"); + long page = Long.valueOf(params.get("page").toString()); + long limit = Long.valueOf(params.get("limit").toString()); + IPage pageData = this.baseMapper.queryPage(new Page(page, limit), params); + return new PageUtils(pageData); + } + + @Override + public List getSysOssEntityList(SysOssEntityData sysOssEntityData) { + return this.baseMapper.getSysOssEntityList(sysOssEntityData); + } + + + @Override + public void updateOssRef(SysOssEntity sysOssEntity) { + lambdaUpdate() + .set(StringUtils.isNotEmpty(sysOssEntity.getFileType()), SysOssEntity::getFileType, sysOssEntity.getFileType()) + .set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef1()), SysOssEntity::getOrderRef1, sysOssEntity.getOrderRef1()) + .set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef2()), SysOssEntity::getOrderRef2, sysOssEntity.getOrderRef2()) + .set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef3()), SysOssEntity::getOrderRef3, sysOssEntity.getOrderRef3()) + .set(StringUtils.isNotEmpty(sysOssEntity.getFileSuffix()), SysOssEntity::getFileSuffix, sysOssEntity.getFileSuffix()) + .set(sysOssEntity.getFileTypeCode() != null, SysOssEntity::getFileTypeCode, sysOssEntity.getFileTypeCode()) + .eq(SysOssEntity::getId, sysOssEntity.getId()) + .update(); + } + + @Value("${sys-file.file-path}") + private String filePath; + + @Override + @Transactional + public void upload(List files, SysOssEntity oss) { + // 上传文件 + Date date = new Date(); + for (MultipartFile file : files) { + String fileName = file.getOriginalFilename(); + if (StringUtils.isEmpty(fileName)) { + throw new IllegalArgumentException("文件名不能为空"); + } + String[] strings = fileName.split("\\."); + String suffix = strings[strings.length - 1]; + // UUID生成文件名 + String uuid = java.util.UUID.randomUUID().toString().replaceAll("-", ""); + String newFileName = uuid +"."+ suffix; + // 根目录 D:\plm-file 加 当前年月日 + String rootPath = filePath; + String yearMonth = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + String path = rootPath + "\\" + yearMonth; + File fileDir = new File(path); + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + // 保存文件 + File targetFile = new File(path, newFileName); + try { + file.transferTo(targetFile); + } catch (IOException e) { + throw new RuntimeException("上传文件失败"); + } + // 保存文件信息 + oss.setFileName(fileName); + oss.setUrl(path + "\\" + newFileName); + oss.setNewFileName(newFileName); + oss.setCreateDate(date); + oss.setFileType(suffix); + this.save(oss); + } + } + + + @Override + @Transactional + public void removeOssFile(List ids) { + List list = lambdaQuery().in(SysOssEntity::getId, ids).list(); + for (SysOssEntity entity : list) { + File file = new File(entity.getUrl()); + if (file.exists()) { + file.delete(); + } + } + removeByIds(ids); + } + + @Override + public List queryOssFile(SysOssEntity oss) { + if (Objects.isNull(oss.getOrderRef1()) && Objects.isNull(oss.getOrderRef2()) && Objects.isNull(oss.getOrderRef3())) { + return new ArrayList<>(); + } + return lambdaQuery() + .eq(SysOssEntity::getOrderRef1, oss.getOrderRef1()) + .eq(SysOssEntity::getOrderRef2, oss.getOrderRef2()) + .eq(StringUtils.isNotEmpty(oss.getOrderRef3()), SysOssEntity::getOrderRef3, oss.getOrderRef3()) + .list(); + } + + @Override + public void previewOssFileById(Integer id, HttpServletResponse response) { + SysOssEntity oss = this.getById(id); + if (Objects.isNull(oss)) { + throw new IllegalArgumentException("文件不存在"); + } + + // 创建文件对象 + File file = new File(oss.getUrl()); + if (!file.exists()) { + throw new IllegalArgumentException("文件不存在"); + } + + String encodedFileName; + try { + encodedFileName = URLEncoder.encode(oss.getFileName(), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("文件名编码失败", e); + } + + // 设置响应头 + if ("txt".equals(oss.getFileSuffix())){ + response.setContentType("text/plain;charset=utf-8"); + }else { + response.setContentType("application/octet-stream;charset=utf-8"); + } + response.setHeader("Content-Disposition", "attachment; filename=" + encodedFileName); + + try (FileInputStream fis = new FileInputStream(file); + BufferedInputStream bis = new BufferedInputStream(fis); + ServletOutputStream os = response.getOutputStream()) { + + byte[] buffer = new byte[1024]; + int bytesRead; + + // 循环读取文件内容并写入到响应流中 + while ((bytesRead = bis.read(buffer)) != -1) { + os.write(buffer, 0, bytesRead); + } + + } catch (IOException e) { + throw new RuntimeException("文件下载失败", e); + } + + } }