文件预览:xi修复各分支不一致的问题

This commit is contained in:
HappyTree
2017-12-30 22:04:17 +08:00
committed by klboke
parent 3a9055ce35
commit eb3d36e5fd
7 changed files with 52 additions and 230 deletions

View File

@ -22,26 +22,18 @@ public class DownloadUtils {
* 再次测试的时候通过前台对比url发现原来参数中有+号特殊字符存在,但是到后之后却变成了空格,突然恍然大悟
* 应该是转义出了问题url转义中会把+号当成空格来计算所以才会出现这种情况遂想要通过整体替换空格为加号因为url
* 中的参数部分是不会出现空格的但是文件名中就不好确定了所以只对url参数部分做替换
* 注: 针对URLEncoder.encode(s,charset)会将空格转成+的情况需要做下面的替换工作
* @param urlAddress
* @param type
* @param needEncode
* 在处理本地文件(测试预览界面的非ufile)的时候要对中文进行转码,
* 因为tomcat对[英文字母a-zA-Z、数字0-9、- _ . ~ 4个特殊字符以及所有保留字符]
* 以外的字符会处理不正常,导致失败
* @return
*/
public ReturnResponse<String> downLoad(String urlAddress, String type, String fileName, String needEncode){
// type = dealWithMS2013(type);
ReturnResponse<String> 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;
}

View File

@ -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;
}*/
/**
* 转换文件
*

View File

@ -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"));
}
}

View File

@ -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<String> 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<String> response = downloadUtils.downLoad(url, suffix, fileName, needEncode);
ReturnResponse<String> 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<String> response = downloadUtils.downLoad(url, suffix, null, needEncode);
ReturnResponse<String> 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;
}