diff --git a/server/src/main/java/cn/keking/service/impl/CadFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/CadFilePreviewImpl.java index f66a33a9..f9b9e174 100644 --- a/server/src/main/java/cn/keking/service/impl/CadFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/CadFilePreviewImpl.java @@ -25,9 +25,11 @@ public class CadFilePreviewImpl implements FilePreview { private static final String FILE_DIR = ConfigConstants.getFileDir(); private final FileHandlerService fileHandlerService; + private final OtherFilePreviewImpl otherFilePreview; - public CadFilePreviewImpl(FileHandlerService fileHandlerService) { + public CadFilePreviewImpl(FileHandlerService fileHandlerService, OtherFilePreviewImpl otherFilePreview) { this.fileHandlerService = fileHandlerService; + this.otherFilePreview = otherFilePreview; } @Override @@ -35,7 +37,6 @@ public class CadFilePreviewImpl implements FilePreview { // 预览Type,参数传了就取参数的,没传取系统默认 String officePreviewType = model.asMap().get("officePreviewType") == null ? ConfigConstants.getOfficePreviewType() : model.asMap().get("officePreviewType").toString(); String baseUrl = BaseUrlFilter.getBaseUrl(); - String suffix = fileAttribute.getSuffix(); String fileName = fileAttribute.getName(); String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + "pdf"; String outFilePath = FILE_DIR + pdfName; @@ -44,17 +45,13 @@ public class CadFilePreviewImpl implements FilePreview { String filePath; ReturnResponse response = DownloadUtils.downLoad(fileAttribute, null); if (response.isFailure()) { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } filePath = response.getContent(); if (StringUtils.hasText(outFilePath)) { boolean convertResult = fileHandlerService.cadToPdf(filePath, outFilePath); if (!convertResult) { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", "cad文件转换异常,请联系管理员"); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, "cad文件转换异常,请联系管理员"); } if (ConfigConstants.isCacheEnabled()) { // 加入缓存 @@ -63,7 +60,7 @@ public class CadFilePreviewImpl implements FilePreview { } } if (baseUrl != null && (OFFICE_PREVIEW_TYPE_IMAGE.equals(officePreviewType) || OFFICE_PREVIEW_TYPE_ALL_IMAGES.equals(officePreviewType))) { - return getPreviewType(model, fileAttribute, officePreviewType, baseUrl, pdfName, outFilePath, fileHandlerService, OFFICE_PREVIEW_TYPE_IMAGE); + return getPreviewType(model, fileAttribute, officePreviewType, baseUrl, pdfName, outFilePath, fileHandlerService, OFFICE_PREVIEW_TYPE_IMAGE,otherFilePreview); } model.addAttribute("pdfUrl", pdfName); return "pdf"; diff --git a/server/src/main/java/cn/keking/service/impl/CompressFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/CompressFilePreviewImpl.java index bfc4a90b..b898d0a2 100644 --- a/server/src/main/java/cn/keking/service/impl/CompressFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/CompressFilePreviewImpl.java @@ -20,10 +20,12 @@ public class CompressFilePreviewImpl implements FilePreview { private final FileHandlerService fileHandlerService; private final CompressFileReader compressFileReader; + private final OtherFilePreviewImpl otherFilePreview; - public CompressFilePreviewImpl(FileHandlerService fileHandlerService, CompressFileReader compressFileReader) { + public CompressFilePreviewImpl(FileHandlerService fileHandlerService, CompressFileReader compressFileReader, OtherFilePreviewImpl otherFilePreview) { this.fileHandlerService = fileHandlerService; this.compressFileReader = compressFileReader; + this.otherFilePreview = otherFilePreview; } @Override @@ -35,9 +37,7 @@ public class CompressFilePreviewImpl implements FilePreview { if (!StringUtils.hasText(fileHandlerService.getConvertedFile(fileName)) || !ConfigConstants.isCacheEnabled()) { ReturnResponse response = DownloadUtils.downLoad(fileAttribute, fileName); if (response.isFailure()) { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } String filePath = response.getContent(); if ("zip".equalsIgnoreCase(suffix) || "jar".equalsIgnoreCase(suffix) || "gzip".equalsIgnoreCase(suffix)) { @@ -57,9 +57,7 @@ public class CompressFilePreviewImpl implements FilePreview { model.addAttribute("fileTree", fileTree); return "compress"; } else { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", "压缩文件类型不受支持,尝试在压缩的时候选择RAR4格式"); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, "压缩文件类型不受支持,尝试在压缩的时候选择RAR4格式"); } } } diff --git a/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java index 0ea750b6..39ea3a67 100644 --- a/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java @@ -19,9 +19,11 @@ import org.springframework.ui.Model; public class MediaFilePreviewImpl implements FilePreview { private final FileHandlerService fileHandlerService; + private final OtherFilePreviewImpl otherFilePreview; - public MediaFilePreviewImpl(FileHandlerService fileHandlerService) { + public MediaFilePreviewImpl(FileHandlerService fileHandlerService, OtherFilePreviewImpl otherFilePreview) { this.fileHandlerService = fileHandlerService; + this.otherFilePreview = otherFilePreview; } @Override @@ -29,10 +31,8 @@ public class MediaFilePreviewImpl implements FilePreview { // 不是http开头,浏览器不能直接访问,需下载到本地 if (url != null && !url.toLowerCase().startsWith("http")) { ReturnResponse response = DownloadUtils.downLoad(fileAttribute, fileAttribute.getName()); - if (!response.isSuccess()) { - model.addAttribute("fileType", fileAttribute.getSuffix()); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + if (response.isFailure()) { + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } else { model.addAttribute("mediaUrl", BaseUrlFilter.getBaseUrl() + fileHandlerService.getRelativePath(response.getContent())); } diff --git a/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java index dbd60c0a..221b52ad 100644 --- a/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java @@ -27,10 +27,12 @@ public class OfficeFilePreviewImpl implements FilePreview { private final FileHandlerService fileHandlerService; private final OfficeToPdfService officeToPdfService; + private final OtherFilePreviewImpl otherFilePreview; - public OfficeFilePreviewImpl(FileHandlerService fileHandlerService, OfficeToPdfService officeToPdfService) { + public OfficeFilePreviewImpl(FileHandlerService fileHandlerService, OfficeToPdfService officeToPdfService, OtherFilePreviewImpl otherFilePreview) { this.fileHandlerService = fileHandlerService; this.officeToPdfService = officeToPdfService; + this.otherFilePreview = otherFilePreview; } @Override @@ -38,8 +40,8 @@ public class OfficeFilePreviewImpl implements FilePreview { // 预览Type,参数传了就取参数的,没传取系统默认 String officePreviewType = fileAttribute.getOfficePreviewType(); String baseUrl = BaseUrlFilter.getBaseUrl(); - String suffix=fileAttribute.getSuffix(); - String fileName=fileAttribute.getName(); + String suffix = fileAttribute.getSuffix(); + String fileName = fileAttribute.getName(); boolean isHtml = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx"); String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf"); String outFilePath = FILE_DIR + pdfName; @@ -48,9 +50,7 @@ public class OfficeFilePreviewImpl implements FilePreview { String filePath; ReturnResponse response = DownloadUtils.downLoad(fileAttribute, null); if (response.isFailure()) { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } filePath = response.getContent(); if (StringUtils.hasText(outFilePath)) { @@ -66,18 +66,16 @@ public class OfficeFilePreviewImpl implements FilePreview { } } if (!isHtml && baseUrl != null && (OFFICE_PREVIEW_TYPE_IMAGE.equals(officePreviewType) || OFFICE_PREVIEW_TYPE_ALL_IMAGES.equals(officePreviewType))) { - return getPreviewType(model, fileAttribute, officePreviewType, baseUrl, pdfName, outFilePath, fileHandlerService, OFFICE_PREVIEW_TYPE_IMAGE); + return getPreviewType(model, fileAttribute, officePreviewType, baseUrl, pdfName, outFilePath, fileHandlerService, OFFICE_PREVIEW_TYPE_IMAGE, otherFilePreview); } model.addAttribute("pdfUrl", pdfName); return isHtml ? "html" : "pdf"; } - static String getPreviewType(Model model, FileAttribute fileAttribute, String officePreviewType, String baseUrl, String pdfName, String outFilePath, FileHandlerService fileHandlerService, String officePreviewTypeImage) { + static String getPreviewType(Model model, FileAttribute fileAttribute, String officePreviewType, String baseUrl, String pdfName, String outFilePath, FileHandlerService fileHandlerService, String officePreviewTypeImage, OtherFilePreviewImpl otherFilePreview) { List imageUrls = fileHandlerService.pdf2jpg(outFilePath, pdfName, baseUrl); if (imageUrls == null || imageUrls.size() < 1) { - model.addAttribute("msg", "office转图片异常,请联系管理员"); - model.addAttribute("fileType",fileAttribute.getSuffix()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, "office转图片异常,请联系管理员"); } model.addAttribute("imgurls", imageUrls); model.addAttribute("currentUrl", imageUrls.get(0)); diff --git a/server/src/main/java/cn/keking/service/impl/OtherFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/OtherFilePreviewImpl.java index be06f161..fbe22443 100644 --- a/server/src/main/java/cn/keking/service/impl/OtherFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/OtherFilePreviewImpl.java @@ -11,10 +11,22 @@ import org.springframework.ui.Model; */ @Service public class OtherFilePreviewImpl implements FilePreview { + + public static final String NOT_SUPPORTED_FILE_PAGE = "fileNotSupported"; + @Override public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) { - model.addAttribute("fileType",fileAttribute.getSuffix()); - model.addAttribute("msg", "系统还不支持该格式文件的在线预览"); - return "fileNotSupported"; + return this.notSupportedFile(model,fileAttribute,"系统还不支持该格式文件的在线预览"); + } + + /** + * 通用的预览失败,导向到不支持的文件响应页面 + * + * @return 页面 + */ + public String notSupportedFile(Model model, FileAttribute fileAttribute, String errMsg) { + model.addAttribute("fileType", fileAttribute.getSuffix()); + model.addAttribute("msg", errMsg); + return NOT_SUPPORTED_FILE_PAGE; } } diff --git a/server/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java index 4f29052f..3f24b54c 100644 --- a/server/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java @@ -20,16 +20,17 @@ import java.util.List; public class PdfFilePreviewImpl implements FilePreview { private final FileHandlerService fileHandlerService; + private final OtherFilePreviewImpl otherFilePreview; private static final String FILE_DIR = ConfigConstants.getFileDir(); - public PdfFilePreviewImpl(FileHandlerService fileHandlerService) { + public PdfFilePreviewImpl(FileHandlerService fileHandlerService, OtherFilePreviewImpl otherFilePreview) { this.fileHandlerService = fileHandlerService; + this.otherFilePreview = otherFilePreview; } @Override public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) { - String suffix=fileAttribute.getSuffix(); - String fileName=fileAttribute.getName(); + String fileName = fileAttribute.getName(); String officePreviewType = fileAttribute.getOfficePreviewType(); String baseUrl = BaseUrlFilter.getBaseUrl(); String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + "pdf"; @@ -39,9 +40,7 @@ public class PdfFilePreviewImpl implements FilePreview { if (!fileHandlerService.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) { ReturnResponse response = DownloadUtils.downLoad(fileAttribute, fileName); if (response.isFailure()) { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } outFilePath = response.getContent(); if (ConfigConstants.isCacheEnabled()) { @@ -51,9 +50,7 @@ public class PdfFilePreviewImpl implements FilePreview { } List imageUrls = fileHandlerService.pdf2jpg(outFilePath, pdfName, baseUrl); if (imageUrls == null || imageUrls.size() < 1) { - model.addAttribute("msg", "pdf转图片异常,请联系管理员"); - model.addAttribute("fileType",fileAttribute.getSuffix()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, "pdf转图片异常,请联系管理员"); } model.addAttribute("imgurls", imageUrls); model.addAttribute("currentUrl", imageUrls.get(0)); @@ -68,9 +65,7 @@ public class PdfFilePreviewImpl implements FilePreview { if (!fileHandlerService.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) { ReturnResponse response = DownloadUtils.downLoad(fileAttribute, pdfName); if (response.isFailure()) { - model.addAttribute("fileType", suffix); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } model.addAttribute("pdfUrl", fileHandlerService.getRelativePath(response.getContent())); if (ConfigConstants.isCacheEnabled()) { diff --git a/server/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java index 6122eae2..68af1771 100644 --- a/server/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java @@ -19,9 +19,11 @@ import java.util.List; public class PictureFilePreviewImpl implements FilePreview { private final FileHandlerService fileHandlerService; + private final OtherFilePreviewImpl otherFilePreview; - public PictureFilePreviewImpl(FileHandlerService fileHandlerService) { + public PictureFilePreviewImpl(FileHandlerService fileHandlerService, OtherFilePreviewImpl otherFilePreview) { this.fileHandlerService = fileHandlerService; + this.otherFilePreview = otherFilePreview; } @Override @@ -37,9 +39,7 @@ public class PictureFilePreviewImpl implements FilePreview { if (url != null && !url.toLowerCase().startsWith("http")) { ReturnResponse response = DownloadUtils.downLoad(fileAttribute, null); if (response.isFailure()) { - model.addAttribute("fileType", fileAttribute.getSuffix()); - model.addAttribute("msg", response.getMsg()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } else { String file = fileHandlerService.getRelativePath(response.getContent()); imgUrls.clear(); diff --git a/server/src/main/java/cn/keking/service/impl/SimTextFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/SimTextFilePreviewImpl.java index 401180f0..1559c63c 100644 --- a/server/src/main/java/cn/keking/service/impl/SimTextFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/SimTextFilePreviewImpl.java @@ -23,23 +23,25 @@ public class SimTextFilePreviewImpl implements FilePreview { public static final String TEXT_TYPE = "textType"; public static final String DEFAULT_TEXT_TYPE = "simText"; + private final OtherFilePreviewImpl otherFilePreview; + + public SimTextFilePreviewImpl(OtherFilePreviewImpl otherFilePreview) { + this.otherFilePreview = otherFilePreview; + } + @Override public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) { String fileName = fileAttribute.getName(); ReturnResponse response = DownloadUtils.downLoad(fileAttribute, fileName); if (response.isFailure()) { - model.addAttribute("msg", response.getMsg()); - model.addAttribute("fileType", fileAttribute.getSuffix()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg()); } try { File originFile = new File(response.getContent()); String xmlString = FileUtils.readFileToString(originFile, StandardCharsets.UTF_8); model.addAttribute("textData", Base64Utils.encodeToString(xmlString.getBytes())); } catch (IOException e) { - model.addAttribute("msg", e.getLocalizedMessage()); - model.addAttribute("fileType", fileAttribute.getSuffix()); - return "fileNotSupported"; + return otherFilePreview.notSupportedFile(model, fileAttribute, e.getLocalizedMessage()); } if (!model.containsAttribute(TEXT_TYPE)) { model.addAttribute(TEXT_TYPE, DEFAULT_TEXT_TYPE); diff --git a/server/src/main/java/cn/keking/service/impl/XmlFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/XmlFilePreviewImpl.java index 17ceb527..7b7092ae 100644 --- a/server/src/main/java/cn/keking/service/impl/XmlFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/XmlFilePreviewImpl.java @@ -20,7 +20,6 @@ public class XmlFilePreviewImpl implements FilePreview { this.simTextFilePreview = simTextFilePreview; } - @Override public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) { model.addAttribute(TEXT_TYPE,"xml"); diff --git a/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java b/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java index 1108f678..37896d20 100644 --- a/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java +++ b/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java @@ -7,7 +7,6 @@ import cn.keking.service.FilePreviewFactory; import cn.keking.service.cache.CacheService; import cn.keking.utils.DownloadUtils; import cn.keking.service.FileHandlerService; -import com.thoughtworks.xstream.core.util.Base64JavaUtilCodec; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; @@ -20,7 +19,6 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.net.URLDecoder; import java.util.Arrays; import java.util.List; @@ -45,25 +43,24 @@ public class OnlinePreviewController { @RequestMapping(value = "/onlinePreview") public String onlinePreview(String url, Model model, HttpServletRequest req) { String fileUrl = new String(Base64Utils.decodeFromString(url)); - FileAttribute fileAttribute = fileHandlerService.getFileAttribute(fileUrl,req); + FileAttribute fileAttribute = fileHandlerService.getFileAttribute(fileUrl, req); FilePreview filePreview = previewFactory.get(fileAttribute); logger.info("预览文件url:{},previewType:{}", fileUrl, fileAttribute.getType()); return filePreview.filePreviewHandle(fileUrl, model, fileAttribute); } @RequestMapping(value = "/picturesPreview") - public String picturesPreview(Model model, HttpServletRequest req) throws UnsupportedEncodingException { - String urls = req.getParameter("urls"); + public String picturesPreview(String urls, Model model, HttpServletRequest req) throws UnsupportedEncodingException { + String fileUrls = new String(Base64Utils.decodeFromString(urls)); String currentUrl = req.getParameter("currentUrl"); - logger.info("预览文件url:{},urls:{}", currentUrl, urls); + logger.info("预览文件url:{},urls:{}", fileUrls, urls); // 路径转码 - String decodedUrl = URLDecoder.decode(urls, "utf-8"); - String decodedCurrentUrl = URLDecoder.decode(currentUrl, "utf-8"); + String decodedCurrentUrl = new String(Base64Utils.decodeFromString(currentUrl)); // 抽取文件并返回文件列表 - String[] imgs = decodedUrl.split("\\|"); + String[] imgs = fileUrls.split("\\|"); List imgUrls = Arrays.asList(imgs); model.addAttribute("imgUrls", imgUrls); - model.addAttribute("currentUrl",decodedCurrentUrl); + model.addAttribute("currentUrl", decodedCurrentUrl); return "picture"; } @@ -71,7 +68,7 @@ public class OnlinePreviewController { * 根据url获取文件内容 * 当pdfjs读取存在跨域问题的文件时将通过此接口读取 * - * @param urlPath url + * @param urlPath url * @param response response */ @RequestMapping(value = "/getCorsFile", method = RequestMethod.GET) @@ -87,6 +84,7 @@ public class OnlinePreviewController { /** * 通过api接口入队 + * * @param url 请编码后在入队 */ @RequestMapping("/addTask")