diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysOssPersonController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysOssPersonController.java index ef8e9f0..3377eeb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysOssPersonController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysOssPersonController.java @@ -119,7 +119,7 @@ public class SysOssPersonController extends BaseController { @SaCheckPermission("file:person:preview") @PostMapping("/preview/{id}") - public void preview(@PathVariable Long id, HttpServletResponse response) throws Exception { - sysOssPersonService.preview(id, response); + public R preview(@NotNull(message = "主键不能为空") @PathVariable Long id) throws Exception { + return R.ok(sysOssPersonService.preview(id)); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssPersonService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssPersonService.java index 62d4f39..2096a20 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssPersonService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssPersonService.java @@ -72,5 +72,5 @@ public interface ISysOssPersonService { Boolean moveByBo(SysOssPersonBo bo); void download(Long id, HttpServletResponse response) throws IOException; - void preview(Long id, HttpServletResponse response) throws Exception; + String preview(Long id) throws Exception; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java index 0adbe52..fd9a313 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java @@ -45,6 +45,15 @@ public interface ISysOssService { */ SysOssVo getById(Long ossId); + + /** + * 根据 ossId 从缓存或数据库中获取Url + * + * @param ossId 文件在数据库中的唯一标识 + * @return url 对象链接 + */ + String getUrlById(Long ossId); + /** * 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库 * @@ -87,15 +96,6 @@ public interface ISysOssService { */ SysOssVo getByMd5(String md5); - /** - * 文件预览 - * - * @param ossId - * @param response - * @throws IOException - */ - void preview(Long ossId, HttpServletResponse response) throws Exception; - SysOssVolumeVo getVolumeVoByType(Integer type); Boolean increase(int type ,Long use); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssPersonServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssPersonServiceImpl.java index ba11117..35a4f97 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssPersonServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssPersonServiceImpl.java @@ -164,7 +164,7 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } - for(Long id :ids){ + for (Long id : ids) { SysOssPersonVo ossPersonVo = baseMapper.selectVoById(id); SysOssVo ossVo = ossService.getById(ossPersonVo.getOssId()); ossService.decrease(2, ossVo.getSize()); @@ -213,8 +213,8 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService { } @Override - public void preview(Long id, HttpServletResponse response) throws Exception { + public String preview(Long id) throws Exception { SysOssPerson ossPerson = baseMapper.selectById(id); - ossService.preview(ossPerson.getOssId(), response); + return ossService.getUrlById(ossPerson.getOssId()); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssResourceServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssResourceServiceImpl.java index 1434d50..79e5c38 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssResourceServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssResourceServiceImpl.java @@ -264,7 +264,7 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService { @Override public void preview(Long id, HttpServletResponse response) throws Exception { SysOssResource ossResource = baseMapper.selectById(id); - ossService.preview(ossResource.getOssId(), response); + //ossService.preview(ossResource.getOssId(), response); baseMapper.addPreviewNum(id); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index 9f29f1d..682de87 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -4,9 +4,6 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.unit.DataSizeUtil; import cn.hutool.core.util.ObjectUtil; -import com.aspose.cells.Workbook; -import com.aspose.slides.Presentation; -import com.aspose.words.Document; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -42,7 +39,9 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; @@ -169,6 +168,19 @@ public class SysOssServiceImpl implements ISysOssService, OssService { return baseMapper.selectVoById(ossId); } + @Override + public String getUrlById(Long ossId) { + SysOssVo vo = SpringUtils.getAopProxy(this).getById(ossId); + if (ObjectUtil.isNotNull(vo)) { + try { + return this.matchingUrl(vo).getUrl(); + } catch (Exception ignored) { + // 如果oss异常无法连接则将数据直接返回 + return vo.getUrl(); + } + } + return null; + } /** * 文件下载方法,支持一次性下载完整文件 @@ -324,56 +336,6 @@ public class SysOssServiceImpl implements ISysOssService, OssService { return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysOss::getFileMd5, md5)); } - @Override - public void preview(Long ossId, HttpServletResponse response) throws Exception { - SysOssVo sysOss = SpringUtils.getAopProxy(this).getById(ossId); - OssClient storage = OssFactory.instance(sysOss.getService()); - InputStream is = null; - OutputStream os = null; - try { - is = storage.getObjectContent(sysOss.getFileName()); - os = response.getOutputStream(); - byte[] byteData = new byte[1024]; - // 前端word预览仅支持.docx,将.doc转换为.docx - if ((".doc").equals(sysOss.getFileSuffix())) { - Document doc = new Document(is); - doc.save(os, com.aspose.words.SaveFormat.DOCX); - } - if ((".xls").equals(sysOss.getFileSuffix())) { - Workbook xls = new Workbook(is); - xls.save(os, com.aspose.cells.SaveFormat.XLSX); - } - if ((".ppt").equals(sysOss.getFileSuffix())) { - Presentation ppt = new Presentation(is); - ppt.save(os, com.aspose.slides.SaveFormat.Pdf); - } - if ((".pptx").equals(sysOss.getFileSuffix())) { - Presentation pptx = new Presentation(is); - pptx.save(os, com.aspose.slides.SaveFormat.Pdf); - } - int len = 0; - while ((len = is.read(byteData)) != -1) { - os.write(byteData, 0, len); - } - os.flush(); - } finally { - if (os != null) { - try { - os.close(); - } catch (IOException e) { - //log.error("IO异常", e); - } - } - if (is != null) { - try { - is.close(); - } catch (IOException e) { - //log.error("IO异常", e); - } - } - } - } - @Override public SysOssVolumeVo getVolumeVoByType(Integer type) { SysOssVolumeVo ossVolumeVo = volumeMapper.selectVoOne(new LambdaQueryWrapper().eq(SysOssVolume::getType, type)); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssTextbookServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssTextbookServiceImpl.java index 08fa0b8..fdb6508 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssTextbookServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssTextbookServiceImpl.java @@ -275,7 +275,7 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService { @Override public void preview(Long id, HttpServletResponse response) throws Exception { SysOssTextbook ossTextbook = baseMapper.selectById(id); - ossService.preview(ossTextbook.getOssId(), response); + //ossService.preview(ossTextbook.getOssId(), response); baseMapper.addPreviewNum(id); } @@ -330,6 +330,8 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService { list.add(".avi"); list.add(".mkv"); } + default -> { + } } return list; }