支持压缩包内图片轮番预览

This commit is contained in:
kl
2018-01-12 16:52:03 +08:00
parent 8cbb1c3bb7
commit 3e5ba7d3ba
7 changed files with 179 additions and 78 deletions

View File

@@ -1,5 +1,6 @@
package com.yudianbank.web.controller;
import com.google.common.collect.Lists;
import com.yudianbank.param.ReturnResponse;
import com.yudianbank.utils.*;
import org.apache.commons.io.IOUtils;
@@ -22,6 +23,8 @@ import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @author yudian-it
@@ -38,30 +41,36 @@ public class OnlinePreviewController {
ZipReader zipReader;
@Autowired
SimTextUtil simTextUtil;
@Value("${simText}")
String[] simText;
@Value("${file.dir}")
String fileDir;
/**
* @param url
* @param model
* @return
*/
@RequestMapping(value = "onlinePreview",method = RequestMethod.GET)
@RequestMapping(value = "onlinePreview", method = RequestMethod.GET)
public String onlinePreview(String url, Model model, HttpServletRequest req) throws UnsupportedEncodingException {
// 路径转码
String decodedUrl = URLDecoder.decode(url, "utf-8");
String type = typeFromUrl(url);
String type = fileUtils.typeFromUrl(url);
String suffix = suffixFromUrl(url);
// 抽取文件并返回文件列表
String fileName = fileUtils.getFileNameFromURL(decodedUrl);
model.addAttribute("fileType", suffix);
if (type.equalsIgnoreCase("picture")) {
model.addAttribute("imgurl", url);
List imgUrls = Lists.newArrayList(url);
try{
String fileKey = req.getParameter("fileKey");
imgUrls.clear();
imgUrls.addAll(fileUtils.getRedisImgUrls(fileKey));
}catch (Exception e){
imgUrls = Lists.newArrayList(url);
}
model.addAttribute("imgurls", imgUrls);
return "picture";
} else if (type.equalsIgnoreCase("simText")){
} else if (type.equalsIgnoreCase("simText")) {
ReturnResponse<String> response = simTextUtil.readSimText(decodedUrl, fileName);
if (0 != response.getCode()) {
model.addAttribute("msg", response.getMsg());
@@ -69,10 +78,10 @@ public class OnlinePreviewController {
}
model.addAttribute("ordinaryUrl", response.getMsg());
return "txt";
} else if(type.equalsIgnoreCase("pdf")){
model.addAttribute("pdfUrl",url);
} else if (type.equalsIgnoreCase("pdf")) {
model.addAttribute("pdfUrl", url);
return "pdf";
} else if(type.equalsIgnoreCase("compress")){
} else if (type.equalsIgnoreCase("compress")) {
String fileTree = null;
// 判断文件名是否存在(redis缓存读取)
if (!StringUtils.hasText(fileUtils.getConvertedFile(fileName))) {
@@ -82,28 +91,25 @@ public class OnlinePreviewController {
return "fileNotSupported";
}
String filePath = response.getContent();
if ("zip".equalsIgnoreCase(suffix)
|| "jar".equalsIgnoreCase(suffix)
|| "gzip".equalsIgnoreCase(suffix)) {
fileTree = zipReader.readZipFile(filePath);
if ("zip".equalsIgnoreCase(suffix) || "jar".equalsIgnoreCase(suffix) || "gzip".equalsIgnoreCase(suffix)) {
fileTree = zipReader.readZipFile(filePath, fileName);
} else if ("rar".equalsIgnoreCase(suffix)) {
fileTree = zipReader.unRar(filePath);
fileTree = zipReader.unRar(filePath, fileName);
}
fileUtils.addConvertedFile(fileName, fileTree);
}else {
} else {
fileTree = fileUtils.getConvertedFile(fileName);
}
System.out.println("返回文件tree》》》》》》》》》》》》》》》》》》》");
if (null != fileTree) {
model.addAttribute("fileTree",fileTree);
model.addAttribute("fileTree", fileTree);
return "compress";
}else {
} else {
model.addAttribute("msg", "压缩文件类型不受支持尝试在压缩的时候选择RAR4格式");
return "fileNotSupported";
}
} else if ("office".equalsIgnoreCase(type)) {
boolean isHtml = suffix.equalsIgnoreCase("xls")
|| suffix.equalsIgnoreCase("xlsx");
|| suffix.equalsIgnoreCase("xlsx");
String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf");
// 判断之前是否已转换过,如果转换过,直接返回,否则执行转换
if (!fileUtils.listConvertedFiles().containsKey(pdfName)) {
@@ -133,47 +139,44 @@ public class OnlinePreviewController {
}
model.addAttribute("pdfUrl", pdfName);
return isHtml ? "html" : "pdf";
}else {
} else {
model.addAttribute("msg", "系统还不支持该格式文件的在线预览," +
"如有需要请按下方显示的邮箱地址联系系统维护人员");
return "fileNotSupported";
}
}
private String suffixFromUrl(String url) {
String nonPramStr = url.substring(0, url.indexOf("?") != -1 ? url.indexOf("?"): url.length());
String fileName = nonPramStr.substring(nonPramStr.lastIndexOf("/") + 1);
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
return fileType;
/**
* 多图片切换预览
*
* @param model
* @param req
* @return
* @throws UnsupportedEncodingException
*/
@RequestMapping(value = "picturesPreview", method = RequestMethod.GET)
public String picturesPreview(String urls, Model model, HttpServletRequest req) throws UnsupportedEncodingException {
// 路径转码
String decodedUrl = URLDecoder.decode(urls, "utf-8");
// 抽取文件并返回文件列表
String[] imgs = decodedUrl.split("|");
List imgurls = Arrays.asList(imgs);
model.addAttribute("imgurls", imgurls);
return "picture";
}
/**
* 查看文件类型(防止参数中存在.点号或者其他特殊字符,所以先抽取文件名,然后再获取文件类型)
* @param url
* @return
*/
private String typeFromUrl(String url) {
String nonPramStr = url.substring(0, url.indexOf("?") != -1 ? url.indexOf("?"): url.length());
private String suffixFromUrl(String url) {
String nonPramStr = url.substring(0, url.indexOf("?") != -1 ? url.indexOf("?") : url.length());
String fileName = nonPramStr.substring(nonPramStr.lastIndexOf("/") + 1);
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
if (fileUtils.listPictureTypes().contains(fileType.toLowerCase())) {
fileType = "picture";
}
if (fileUtils.listArchiveTypes().contains(fileType.toLowerCase())) {
fileType = "compress";
}
if (fileUtils.listOfficeTypes().contains(fileType.toLowerCase())) {
fileType = "office";
}
if (Arrays.asList(simText).contains(fileType.toLowerCase())) {
fileType = "simText";
}
return fileType;
}
/**
* 根据url获取文件内容
* 当pdfjs读取存在跨域问题的文件时将通过此接口读取
*
* @param urlPath
* @param resp
*/
@@ -182,21 +185,21 @@ public class OnlinePreviewController {
InputStream inputStream = null;
try {
String strUrl = urlPath.trim();
URL url=new URL(strUrl);
URL url = new URL(strUrl);
//打开请求连接
URLConnection connection = url.openConnection();
HttpURLConnection httpURLConnection=(HttpURLConnection) connection;
HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
httpURLConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
inputStream = httpURLConnection.getInputStream();
byte[] bs = new byte[1024];
int len;
while(-1 != (len = inputStream.read(bs))) {
while (-1 != (len = inputStream.read(bs))) {
resp.getOutputStream().write(bs, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(inputStream != null) {
if (inputStream != null) {
IOUtils.closeQuietly(inputStream);
}
}