From eb3d36e5fd9c2afaf07e69c23079d5561aa7398a Mon Sep 17 00:00:00 2001 From: HappyTree <1210893441@qq.com> Date: Sat, 30 Dec 2017 22:04:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E9=A2=84=E8=A7=88:xi?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=84=E5=88=86=E6=94=AF=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yudianbank/utils/DownloadUtils.java | 20 +- .../com/yudianbank/utils/OfficeToPdf.java | 17 -- .../java/com/yudianbank/utils/WordToHtml.java | 7 +- .../controller/OnlinePreviewController.java | 42 ++--- .../src/main/resources/static/index.html | 172 ------------------ .../src/main/resources/web/compress.ftl | 19 +- .../src/main/resources/web/picture.ftl | 5 +- 7 files changed, 52 insertions(+), 230 deletions(-) delete mode 100644 jodconverter-web/src/main/resources/static/index.html diff --git a/jodconverter-web/src/main/java/com/yudianbank/utils/DownloadUtils.java b/jodconverter-web/src/main/java/com/yudianbank/utils/DownloadUtils.java index a689a2e2..a19b3ec7 100644 --- a/jodconverter-web/src/main/java/com/yudianbank/utils/DownloadUtils.java +++ b/jodconverter-web/src/main/java/com/yudianbank/utils/DownloadUtils.java @@ -22,26 +22,18 @@ public class DownloadUtils { * 再次测试的时候,通过前台对比url发现,原来参数中有+号特殊字符存在,但是到后之后却变成了空格,突然恍然大悟 * 应该是转义出了问题,url转义中会把+号当成空格来计算,所以才会出现这种情况,遂想要通过整体替换空格为加号,因为url * 中的参数部分是不会出现空格的,但是文件名中就不好确定了,所以只对url参数部分做替换 + * 注: 针对URLEncoder.encode(s,charset)会将空格转成+的情况需要做下面的替换工作 * @param urlAddress * @param type - * @param needEncode - * 在处理本地文件(测试预览界面的,非ufile)的时候要对中文进行转码, - * 因为tomcat对[英文字母(a-z,A-Z)、数字(0-9)、- _ . ~ 4个特殊字符以及所有保留字符] - * 以外的字符会处理不正常,导致失败 * @return */ public ReturnResponse downLoad(String urlAddress, String type, String fileName, String needEncode){ -// type = dealWithMS2013(type); ReturnResponse response = new ReturnResponse<>(0, "下载成功!!!", ""); URL url = null; try { - if (null != needEncode) { - urlAddress = encodeUrlParam(urlAddress); - // 因为tomcat不能处理'+'号,所以讲'+'号替换成'%20%' - urlAddress = urlAddress.replaceAll("\\+", "%20"); - }else{ - urlAddress = replacePlusMark(urlAddress); - } + urlAddress = encodeUrlParam(urlAddress); + // 因为tomcat不能处理'+'号,所以讲'+'号替换成'%20%' + urlAddress = urlAddress.replaceAll("\\+", "%20"); url = new URL(urlAddress); } catch (MalformedURLException e) { e.printStackTrace(); @@ -93,6 +85,8 @@ public class DownloadUtils { } /** + * 注:可能是原来因为前端通过encodeURI来编码的,因为通过encodeURI编码+会被转成+号(亦即没有转), + * 而通过encodeURIComponent则会转成%2B,这样URLDecoder是可以正确处理的,所以也就没有必要在这里替换了 * 转换url参数部分的空格为加号(因为在url编解码的过程中出现+转为空格的情况) * @param urlAddress * @return @@ -116,7 +110,7 @@ public class DownloadUtils { String param = ""; if (urlAddress.contains("?")) { path = urlAddress.substring(0, urlAddress.indexOf("?")); - param = urlAddress.substring(urlAddress.indexOf("?") + 1); + param = urlAddress.substring(urlAddress.indexOf("?")); }else { path = urlAddress; } diff --git a/jodconverter-web/src/main/java/com/yudianbank/utils/OfficeToPdf.java b/jodconverter-web/src/main/java/com/yudianbank/utils/OfficeToPdf.java index 64c066e2..b5793c9b 100644 --- a/jodconverter-web/src/main/java/com/yudianbank/utils/OfficeToPdf.java +++ b/jodconverter-web/src/main/java/com/yudianbank/utils/OfficeToPdf.java @@ -30,23 +30,6 @@ public class OfficeToPdf { } - - /** - * 连接OpenOffice.org 并且启动OpenOffice.org - * - * @return - */ - /*public OfficeManager getOfficeManager() { - DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); - // 获取OpenOffice.org 3的安装目录 - String officeHome = openOfficePath; - config.setOfficeHome(officeHome); - // 启动OpenOffice的服务 - OfficeManager officeManager = config.buildOfficeManager(); - officeManager.start(); - return officeManager; - }*/ - /** * 转换文件 * diff --git a/jodconverter-web/src/main/java/com/yudianbank/utils/WordToHtml.java b/jodconverter-web/src/main/java/com/yudianbank/utils/WordToHtml.java index 9184e28d..0a719755 100644 --- a/jodconverter-web/src/main/java/com/yudianbank/utils/WordToHtml.java +++ b/jodconverter-web/src/main/java/com/yudianbank/utils/WordToHtml.java @@ -1,6 +1,8 @@ package com.yudianbank.utils; import java.io.*; +import java.net.URLDecoder; +import java.net.URLEncoder; import java.util.*; import java.util.function.Function; import java.util.function.ToDoubleFunction; @@ -53,9 +55,8 @@ public class WordToHtml { } public static void main(String[] args) throws IOException, ArchiveException, RarException { - File file = new File("C:\\Users\\yudian-it\\Downloads\\Downloads.zip"); - System.out.println("Objects.equals(new Integer(1000), new Integer(1000)) :" + Objects.equals(new Integer(1000), new Integer(1000))); - System.out.println(Integer.valueOf("-129") == Integer.valueOf("-129")); + System.out.println(URLEncoder.encode(" ", "UTF-8")); + System.out.println(URLDecoder.decode(" http://keking.ufile.ucloud.com.cn/20171230213253_2017%E5%B9%B4%20%E5%BA%A6%E7%BB%A9%E6%95%88%E8%80%83%E6%A0%B8%E8%A1%A8%E5%8F%8A%E8%AF%84%E4%BC%98%E6%8E%A8%E8%8D%90%E8%A1%A8.xlsxUCloudPublicKey=ucloudtangshd@weifenf.com14355492830001993909323&Expires=&Signature=Pbi/J6UcOZcvGwhAwExe3SpxrGo=", "UTF-8")); } } diff --git a/jodconverter-web/src/main/java/com/yudianbank/web/controller/OnlinePreviewController.java b/jodconverter-web/src/main/java/com/yudianbank/web/controller/OnlinePreviewController.java index 8c8a4aaf..4b357bb8 100644 --- a/jodconverter-web/src/main/java/com/yudianbank/web/controller/OnlinePreviewController.java +++ b/jodconverter-web/src/main/java/com/yudianbank/web/controller/OnlinePreviewController.java @@ -1,22 +1,15 @@ package com.yudianbank.web.controller; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yudianbank.param.ReturnResponse; -import com.yudianbank.utils.DownloadUtils; -import com.yudianbank.utils.FileUtils; -import com.yudianbank.utils.OfficeToPdf; -import com.yudianbank.utils.ZipReader; +import com.yudianbank.utils.*; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -28,6 +21,7 @@ import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; +import java.util.Arrays; /** * @author yudian-it @@ -42,6 +36,10 @@ public class OnlinePreviewController { DownloadUtils downloadUtils; @Autowired ZipReader zipReader; + @Autowired + SimTextUtil simTextUtil; + @Value("${simText}") + String[] simText; @Value("${file.dir}") String fileDir; @@ -54,31 +52,31 @@ public class OnlinePreviewController { @RequestMapping(value = "onlinePreview",method = RequestMethod.GET) public String onlinePreview(String url, String needEncode, Model model, HttpServletRequest req) throws UnsupportedEncodingException { // 路径转码 - url = URLDecoder.decode(url, "utf-8"); + String decodedUrl = URLDecoder.decode(url, "utf-8"); String type = typeFromUrl(url); String suffix = suffixFromUrl(url); + // 抽取文件并返回文件列表 + String fileName = fileUtils.getFileNameFromURL(decodedUrl); model.addAttribute("fileType", suffix); if (type.equalsIgnoreCase("picture")) { model.addAttribute("imgurl", url); return "picture"; - } else if (type.equalsIgnoreCase("txt") - || type.equalsIgnoreCase("html") - || type.equalsIgnoreCase("xml") - || type.equalsIgnoreCase("java") - || type.equalsIgnoreCase("properties") - || type.equalsIgnoreCase("mp3")){ - model.addAttribute("ordinaryUrl",url); + } else if (type.equalsIgnoreCase("simText")){ + ReturnResponse response = simTextUtil.readSimText(decodedUrl, fileName, needEncode); + if (0 != response.getCode()) { + model.addAttribute("msg", response.getMsg()); + return "fileNotSupported"; + } + model.addAttribute("ordinaryUrl", response.getMsg()); return "txt"; } else if(type.equalsIgnoreCase("pdf")){ model.addAttribute("pdfUrl",url); return "pdf"; } else if(type.equalsIgnoreCase("compress")){ - // 抽取文件并返回文件列表 - String fileName = fileUtils.getFileNameFromURL(url); String fileTree = null; // 判断文件名是否存在(redis缓存读取) if (!StringUtils.hasText(fileUtils.getConvertedFile(fileName))) { - ReturnResponse response = downloadUtils.downLoad(url, suffix, fileName, needEncode); + ReturnResponse response = downloadUtils.downLoad(decodedUrl, suffix, fileName, needEncode); if (0 != response.getCode()) { model.addAttribute("msg", response.getMsg()); return "fileNotSupported"; @@ -104,7 +102,6 @@ public class OnlinePreviewController { return "fileNotSupported"; } } else if ("office".equalsIgnoreCase(type)) { - String fileName = fileUtils.getFileNameFromURL(url); boolean isHtml = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx"); String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf"); @@ -112,7 +109,7 @@ public class OnlinePreviewController { if (!fileUtils.listConvertedFiles().containsKey(pdfName)) { String filePath = fileDir + fileName; if (!new File(filePath).exists()) { - ReturnResponse response = downloadUtils.downLoad(url, suffix, null, needEncode); + ReturnResponse response = downloadUtils.downLoad(decodedUrl, suffix, null, needEncode); if (0 != response.getCode()) { model.addAttribute("msg", response.getMsg()); return "fileNotSupported"; @@ -168,6 +165,9 @@ public class OnlinePreviewController { if (fileUtils.listOfficeTypes().contains(fileType.toLowerCase())) { fileType = "office"; } + if (Arrays.asList(simText).contains(fileType.toLowerCase())) { + fileType = "simText"; + } return fileType; } diff --git a/jodconverter-web/src/main/resources/static/index.html b/jodconverter-web/src/main/resources/static/index.html deleted file mode 100644 index f235f26a..00000000 --- a/jodconverter-web/src/main/resources/static/index.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - 图片预览图 - - - - - - - - -

文件预览项目接入和测试界面

-
-
- -
-
-
- 如果你的项目需要接入文件预览项目,达到对docx、excel、ppt、jpg等文件的预览效果,那么通过在你的项目中加入下面的代码就可以 - 成功实现: -
-                        $scope.openWin = function (fileUrl) {
-                            var url = configuration.previewUrl + encodeURIComponent(fileUrl);
-                            var winHeight = window.document.documentElement.clientHeight-10;
-                            $window.open(url, "_blank", "height=" + winHeight
-                                + ",top=80,left=80,toolbar=no, menubar=no, scrollbars=yes, resizable=yes");
-                        };
-                    
- 说明: -

1.这里的fileUrl即是需要预览的服务器文件,一般是ufile文件

-

2.只所以使用encodeURIComponent转码是因为ufile文件中可能会存在&等特殊字符,那么如果不转码会被浏览器处理成多参数 - 这样后台获取的就不是需要预览的文件的全路径了。

-

3.configuration.previewUrl是需要接入项目中配置文件预览项目的地址的配置 - 现在开发和测试地址都是: - http://106.75.31.215:8012/onlinePreview?url=服务器(ufile)文件路径

-
-
-
-
- -
- -
-
-

因为是测试所以一种文件只允许上传一个

-
-
- - -
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/jodconverter-web/src/main/resources/web/compress.ftl b/jodconverter-web/src/main/resources/web/compress.ftl index 3293112f..a904bc14 100644 --- a/jodconverter-web/src/main/resources/web/compress.ftl +++ b/jodconverter-web/src/main/resources/web/compress.ftl @@ -55,9 +55,22 @@ }, onClick:function (event, treeId, treeNode) { if (!treeNode.directory) { - var winHeight = window.document.documentElement.clientHeight-10; - window.open("${baseUrl}onlinePreview?url=" + encodeURIComponent("${baseUrl}" + treeNode.fileName) + "&needEncode=1", - "_blank", "height=" + winHeight + ",top=80,left=80,toolbar=no, menubar=no, scrollbars=yes, resizable=yes"); + /**实现窗口最大化**/ + var fulls = "left=0,screenX=0,top=0,screenY=0,scrollbars=1"; //定义弹出窗口的参数 + if (window.screen) { + var ah = screen.availHeight - 30; + var aw = (screen.availWidth - 10) / 2; + fulls += ",height=" + ah; + fulls += ",innerHeight=" + ah; + fulls += ",width=" + aw; + fulls += ",innerWidth=" + aw; + fulls += ",resizable" + } else { + fulls += ",resizable"; // 对于不支持screen属性的浏览器,可以手工进行最大化。 manually + } + window.open("onlinePreview?url=" + + encodeURIComponent("${baseUrl}" + treeNode.fileName) + + "&needEncode=1", "_blank",fulls); } } } diff --git a/jodconverter-web/src/main/resources/web/picture.ftl b/jodconverter-web/src/main/resources/web/picture.ftl index bc5f9d55..e8bda5ad 100644 --- a/jodconverter-web/src/main/resources/web/picture.ftl +++ b/jodconverter-web/src/main/resources/web/picture.ftl @@ -15,7 +15,9 @@

如果图片质量很好,首次加载图片时间可能会有点长,请耐心等待

    -
  • + <#--
  • --> + +
@@ -26,6 +28,7 @@ document.getElementById("Imgbox").src =document.getElementById("url").value; } var viewer = new Viewer(document.getElementById('dowebok'), {url: 'src'}); + viewer.show();