|
|
@@ -1,7 +1,7 @@
|
|
|
package nju.seec.helper.service.impl;
|
|
|
|
|
|
import com.google.common.collect.ImmutableSet;
|
|
|
-import lombok.AllArgsConstructor;
|
|
|
+import com.google.common.io.Files;
|
|
|
import lombok.SneakyThrows;
|
|
|
import nju.seec.helper.dao.ChooseDAO;
|
|
|
import nju.seec.helper.dao.CourseDAO;
|
|
|
@@ -20,14 +20,15 @@ import nju.seec.helper.service.SlideService;
|
|
|
import nju.seec.helper.service.util.AuthUtils;
|
|
|
import nju.seec.helper.service.util.StringUtils;
|
|
|
import nju.seec.helper.util.Consts;
|
|
|
-import nju.seec.helper.util.FileUtils;
|
|
|
+import nju.seec.helper.util.OssUtils;
|
|
|
import nju.seec.helper.util.RedisCacheUtils;
|
|
|
import nju.seec.helper.util.enums.ExceptionType;
|
|
|
import nju.seec.helper.util.enums.MessageType;
|
|
|
import nju.seec.helper.util.enums.SlideState;
|
|
|
import nju.seec.helper.util.exception.HelperException;
|
|
|
+import nju.seec.helper.util.file.FileInfo;
|
|
|
+import nju.seec.helper.util.file.FileParserContext;
|
|
|
import nju.seec.helper.vo.SlideVO;
|
|
|
-import org.apache.pdfbox.pdmodel.PDDocument;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
|
@@ -36,7 +37,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.File;
|
|
|
-import java.util.Objects;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@@ -54,18 +54,18 @@ public class SlideServiceImpl implements SlideService {
|
|
|
private final UserDAO userDAO;
|
|
|
|
|
|
private final QuizService quizService;
|
|
|
- private final FileUtils fileUtils;
|
|
|
+ private final OssUtils ossUtils;
|
|
|
private final RedisCacheUtils cacheUtils;
|
|
|
|
|
|
private final MessageService messageService;
|
|
|
private final CourseService courseService;
|
|
|
|
|
|
- public SlideServiceImpl(CourseDAO courseDAO, SlideDAO slideDAO, ChooseDAO chooseDAO, UserDAO userDAO, FileUtils fileUtils, RedisCacheUtils cacheUtils, MessageService messageService, QuizService quizService, CourseService courseService) {
|
|
|
+ public SlideServiceImpl(CourseDAO courseDAO, SlideDAO slideDAO, ChooseDAO chooseDAO, UserDAO userDAO, OssUtils ossUtils, RedisCacheUtils cacheUtils, MessageService messageService, QuizService quizService, CourseService courseService) {
|
|
|
this.courseDAO = courseDAO;
|
|
|
this.slideDAO = slideDAO;
|
|
|
this.chooseDAO = chooseDAO;
|
|
|
this.userDAO = userDAO;
|
|
|
- this.fileUtils = fileUtils;
|
|
|
+ this.ossUtils = ossUtils;
|
|
|
this.cacheUtils = cacheUtils;
|
|
|
this.messageService = messageService;
|
|
|
this.quizService = quizService;
|
|
|
@@ -89,15 +89,15 @@ public class SlideServiceImpl implements SlideService {
|
|
|
|
|
|
MultipartFile file = slideDTO.getFile();
|
|
|
FileInfo fileInfo = getFileInfo(file);
|
|
|
- slide.setPages(fileInfo.pages);
|
|
|
+ slide.setPages(fileInfo.getPages());
|
|
|
slide.setObjectName("temp");
|
|
|
slide = slideDAO.save(slide);
|
|
|
|
|
|
- String objectName = getObjectName(slide.getId(), slide.getName(), fileInfo.suffix);
|
|
|
+ String objectName = getObjectName(slide.getId(), slide.getName(), fileInfo.getExtension());
|
|
|
slide.setObjectName(objectName);
|
|
|
slide = slideDAO.save(slide);
|
|
|
|
|
|
- fileUtils.upload(objectName, file.getInputStream());
|
|
|
+ ossUtils.upload(objectName, file.getInputStream());
|
|
|
|
|
|
return new SlideVO(slide);
|
|
|
}
|
|
|
@@ -112,13 +112,13 @@ public class SlideServiceImpl implements SlideService {
|
|
|
|
|
|
slide.setName(slideDTO.getName());
|
|
|
String oldObjectName = slide.getObjectName();
|
|
|
- String newObjectName = getObjectName(slide.getId(), slide.getName(), oldObjectName.substring(oldObjectName.lastIndexOf('.') + 1));
|
|
|
+ String newObjectName = getObjectName(slide.getId(), slide.getName(), Files.getFileExtension(oldObjectName));
|
|
|
slide.setObjectName(newObjectName);
|
|
|
slide = slideDAO.save(slide);
|
|
|
|
|
|
if (!oldObjectName.equals(newObjectName)) {
|
|
|
- fileUtils.copy(oldObjectName, newObjectName);
|
|
|
- fileUtils.delete(oldObjectName);
|
|
|
+ ossUtils.copy(oldObjectName, newObjectName);
|
|
|
+ ossUtils.delete(oldObjectName);
|
|
|
}
|
|
|
|
|
|
return new SlideVO(slide);
|
|
|
@@ -164,16 +164,16 @@ public class SlideServiceImpl implements SlideService {
|
|
|
|
|
|
MultipartFile file = slideFileDTO.getFile();
|
|
|
FileInfo fileInfo = getFileInfo(file);
|
|
|
- slide.setPages(fileInfo.pages);
|
|
|
+ slide.setPages(fileInfo.getPages());
|
|
|
|
|
|
String oldObjectName = slide.getObjectName();
|
|
|
- String newObjectName = getObjectName(slide.getId(), slide.getName(), fileInfo.suffix);
|
|
|
+ String newObjectName = getObjectName(slide.getId(), slide.getName(), fileInfo.getExtension());
|
|
|
slide.setObjectName(newObjectName);
|
|
|
slideDAO.save(slide);
|
|
|
|
|
|
- fileUtils.upload(newObjectName, file.getInputStream());
|
|
|
+ ossUtils.upload(newObjectName, file.getInputStream());
|
|
|
if (!oldObjectName.equals(newObjectName)) {
|
|
|
- fileUtils.delete(oldObjectName);
|
|
|
+ ossUtils.delete(oldObjectName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -187,23 +187,9 @@ public class SlideServiceImpl implements SlideService {
|
|
|
slideDAO.save(slide);
|
|
|
}
|
|
|
|
|
|
- @SuppressWarnings("all")
|
|
|
@SneakyThrows
|
|
|
private FileInfo getFileInfo(MultipartFile file) {
|
|
|
- switch (Objects.requireNonNull(file.getContentType())) {
|
|
|
- case "application/pdf":
|
|
|
- // 解析页数
|
|
|
- PDDocument doc = PDDocument.load(file.getInputStream());
|
|
|
- return FileInfo.of(doc.getNumberOfPages(), "pdf");
|
|
|
- default:
|
|
|
- throw HelperException.of(ExceptionType.PARAM_ERROR, "不支持的文件类型");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @AllArgsConstructor(staticName = "of")
|
|
|
- private static class FileInfo {
|
|
|
- private int pages;
|
|
|
- private String suffix;
|
|
|
+ return FileParserContext.getFileInfo(file);
|
|
|
}
|
|
|
|
|
|
private String getObjectName(Long slideId, String slideName, String suffix) {
|
|
|
@@ -254,7 +240,7 @@ public class SlideServiceImpl implements SlideService {
|
|
|
if (url != null) {
|
|
|
return url;
|
|
|
}
|
|
|
- url = fileUtils.getUrl(slide.getObjectName(), SLIDE_URL_LIVING_SECONDS);
|
|
|
+ url = ossUtils.getUrl(slide.getObjectName(), SLIDE_URL_LIVING_SECONDS);
|
|
|
cacheUtils.set(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName(), url, SLIDE_URL_LIVING_SECONDS, TimeUnit.SECONDS);
|
|
|
return url;
|
|
|
}
|