|
|
|
@ -8,6 +8,7 @@ import com.google.common.collect.Lists;
|
|
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
|
import java.io.*; |
|
|
|
|
import java.nio.charset.Charset; |
|
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
@ -17,7 +18,6 @@ import java.util.List;
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
* @author yudian-it |
|
|
|
|
* @date 2017/11/13 |
|
|
|
|
*/ |
|
|
|
@ -80,10 +80,10 @@ public class FileUtils {
|
|
|
|
|
if (listOfficeTypes().contains(fileType.toLowerCase())) { |
|
|
|
|
return FileType.office; |
|
|
|
|
} |
|
|
|
|
if("md".equalsIgnoreCase(fileType)){ |
|
|
|
|
if ("md".equalsIgnoreCase(fileType)) { |
|
|
|
|
return FileType.markdown; |
|
|
|
|
} |
|
|
|
|
if("xml".equalsIgnoreCase(fileType)){ |
|
|
|
|
if ("xml".equalsIgnoreCase(fileType)) { |
|
|
|
|
return FileType.xml; |
|
|
|
|
} |
|
|
|
|
if (Arrays.asList(simText).contains(fileType.toLowerCase())) { |
|
|
|
@ -100,30 +100,31 @@ public class FileUtils {
|
|
|
|
|
} |
|
|
|
|
return FileType.other; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 从url中剥离出文件名 |
|
|
|
|
* @param url |
|
|
|
|
* 格式如:http://keking.ufile.ucloud.com.cn/20171113164107_月度绩效表模板(新).xls?UCloudPublicKey=ucloudtangshd@weifenf.com14355492830001993909323&Expires=&Signature=I D1NOFtAJSPT16E6imv6JWuq0k=
|
|
|
|
|
* |
|
|
|
|
* @param url 格式如:http://keking.ufile.ucloud.com.cn/20171113164107_月度绩效表模板(新).xls?UCloudPublicKey=ucloudtangshd@weifenf.com14355492830001993909323&Expires=&Signature=I D1NOFtAJSPT16E6imv6JWuq0k=
|
|
|
|
|
* @return 文件名 |
|
|
|
|
*/ |
|
|
|
|
public String getFileNameFromURL(String url) { |
|
|
|
|
// 因为url的参数中可能会存在/的情况,所以直接url.lastIndexOf("/")会有问题
|
|
|
|
|
// 所以先从?处将url截断,然后运用url.lastIndexOf("/")获取文件名
|
|
|
|
|
String noQueryUrl = url.substring(0, url.contains("?") ? url.indexOf("?"): url.length()); |
|
|
|
|
String noQueryUrl = url.substring(0, url.contains("?") ? url.indexOf("?") : url.length()); |
|
|
|
|
return noQueryUrl.substring(noQueryUrl.lastIndexOf("/") + 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 从路径中获取文件负 |
|
|
|
|
* @param path |
|
|
|
|
* 类似这种:C:\Users\yudian-it\Downloads |
|
|
|
|
* |
|
|
|
|
* @param path 类似这种:C:\Users\yudian-it\Downloads |
|
|
|
|
* @return 文件名 |
|
|
|
|
*/ |
|
|
|
|
public String getFileNameFromPath(String path) { |
|
|
|
|
return path.substring(path.lastIndexOf(File.separator) + 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<String> listPictureTypes(){ |
|
|
|
|
public List<String> listPictureTypes() { |
|
|
|
|
List<String> list = Lists.newArrayList(); |
|
|
|
|
list.add("jpg"); |
|
|
|
|
list.add("jpeg"); |
|
|
|
@ -135,7 +136,7 @@ public class FileUtils {
|
|
|
|
|
return list; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<String> listArchiveTypes(){ |
|
|
|
|
public List<String> listArchiveTypes() { |
|
|
|
|
List<String> list = Lists.newArrayList(); |
|
|
|
|
list.add("rar"); |
|
|
|
|
list.add("zip"); |
|
|
|
@ -160,6 +161,7 @@ public class FileUtils {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取相对路径 |
|
|
|
|
* |
|
|
|
|
* @param absolutePath 绝对路径 |
|
|
|
|
* @return 相对路径 |
|
|
|
|
*/ |
|
|
|
@ -169,45 +171,51 @@ public class FileUtils {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 添加转换后PDF缓存 |
|
|
|
|
* |
|
|
|
|
* @param fileName pdf文件名 |
|
|
|
|
* @param value 缓存相对路径 |
|
|
|
|
* @param value 缓存相对路径 |
|
|
|
|
*/ |
|
|
|
|
public void addConvertedFile(String fileName, String value){ |
|
|
|
|
public void addConvertedFile(String fileName, String value) { |
|
|
|
|
cacheService.putPDFCache(fileName, value); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 添加转换后图片组缓存 |
|
|
|
|
* |
|
|
|
|
* @param pdfFilePath pdf文件绝对路径 |
|
|
|
|
* @param num 图片张数 |
|
|
|
|
* @param num 图片张数 |
|
|
|
|
*/ |
|
|
|
|
public void addConvertedPdfImage(String pdfFilePath, int num){ |
|
|
|
|
public void addConvertedPdfImage(String pdfFilePath, int num) { |
|
|
|
|
cacheService.putPdfImageCache(pdfFilePath, num); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取redis中压缩包内图片文件 |
|
|
|
|
* |
|
|
|
|
* @param fileKey fileKey |
|
|
|
|
* @return 图片文件访问url列表 |
|
|
|
|
*/ |
|
|
|
|
public List<String> getImgCache(String fileKey){ |
|
|
|
|
public List<String> getImgCache(String fileKey) { |
|
|
|
|
return cacheService.getImgCache(fileKey); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 设置redis中压缩包内图片文件 |
|
|
|
|
* |
|
|
|
|
* @param fileKey fileKey |
|
|
|
|
* @param imgs 图片文件访问url列表 |
|
|
|
|
* @param imgs 图片文件访问url列表 |
|
|
|
|
*/ |
|
|
|
|
public void putImgCache(String fileKey,List<String> imgs){ |
|
|
|
|
public void putImgCache(String fileKey, List<String> imgs) { |
|
|
|
|
cacheService.putImgCache(fileKey, imgs); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 判断文件编码格式 |
|
|
|
|
* |
|
|
|
|
* @param path 绝对路径 |
|
|
|
|
* @return 编码格式 |
|
|
|
|
*/ |
|
|
|
|
public String getFileEncodeUTFGBK(String path){ |
|
|
|
|
public String getFileEncodeUTFGBK(String path) { |
|
|
|
|
String enc = Charset.forName("GBK").name(); |
|
|
|
|
File file = new File(path); |
|
|
|
|
InputStream in; |
|
|
|
@ -228,14 +236,15 @@ public class FileUtils {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 对转换后的文件进行操作(改变编码方式) |
|
|
|
|
* |
|
|
|
|
* @param outFilePath 文件绝对路径 |
|
|
|
|
*/ |
|
|
|
|
public void doActionConvertedFile(String outFilePath) { |
|
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
|
try (InputStream inputStream = new FileInputStream(outFilePath); |
|
|
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, DEFAULT_CONVERTER_CHARSET))){ |
|
|
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, DEFAULT_CONVERTER_CHARSET))) { |
|
|
|
|
String line; |
|
|
|
|
while(null != (line = reader.readLine())){ |
|
|
|
|
while (null != (line = reader.readLine())) { |
|
|
|
|
if (line.contains("charset=gb2312")) { |
|
|
|
|
line = line.replace("charset=gb2312", "charset=utf-8"); |
|
|
|
|
} |
|
|
|
@ -249,15 +258,17 @@ public class FileUtils {
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
// 重新写入文件
|
|
|
|
|
try(FileOutputStream fos = new FileOutputStream(outFilePath); |
|
|
|
|
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8))) { |
|
|
|
|
try (FileOutputStream fos = new FileOutputStream(outFilePath); |
|
|
|
|
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8))) { |
|
|
|
|
writer.write(sb.toString()); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取文件后缀 |
|
|
|
|
* |
|
|
|
|
* @param url url |
|
|
|
|
* @return 文件后缀 |
|
|
|
|
*/ |
|
|
|
@ -273,7 +284,8 @@ public class FileUtils {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取url中的参数 |
|
|
|
|
* @param url url |
|
|
|
|
* |
|
|
|
|
* @param url url |
|
|
|
|
* @param name 参数名 |
|
|
|
|
* @return 参数值 |
|
|
|
|
*/ |
|
|
|
@ -285,10 +297,10 @@ public class FileUtils {
|
|
|
|
|
} |
|
|
|
|
//每个键值为一组
|
|
|
|
|
String[] arrSplit = strUrlParam.split("[&]"); |
|
|
|
|
for(String strSplit : arrSplit) { |
|
|
|
|
for (String strSplit : arrSplit) { |
|
|
|
|
String[] arrSplitEqual = strSplit.split("[=]"); |
|
|
|
|
//解析出键值
|
|
|
|
|
if(arrSplitEqual.length > 1) { |
|
|
|
|
if (arrSplitEqual.length > 1) { |
|
|
|
|
//正确解析
|
|
|
|
|
mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]); |
|
|
|
|
} else if (!arrSplitEqual[0].equals("")) { |
|
|
|
@ -301,6 +313,7 @@ public class FileUtils {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 去掉url中的路径,留下请求参数部分 |
|
|
|
|
* |
|
|
|
|
* @param strURL url地址 |
|
|
|
|
* @return url请求参数部分 |
|
|
|
|
*/ |
|
|
|
@ -308,10 +321,10 @@ public class FileUtils {
|
|
|
|
|
String strAllParam = null; |
|
|
|
|
strURL = strURL.trim(); |
|
|
|
|
String[] arrSplit = strURL.split("[?]"); |
|
|
|
|
if(strURL.length() > 1) { |
|
|
|
|
if(arrSplit.length > 1) { |
|
|
|
|
if(arrSplit[1] != null) { |
|
|
|
|
strAllParam=arrSplit[1]; |
|
|
|
|
if (strURL.length() > 1) { |
|
|
|
|
if (arrSplit.length > 1) { |
|
|
|
|
if (arrSplit[1] != null) { |
|
|
|
|
strAllParam = arrSplit[1]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -320,23 +333,33 @@ public class FileUtils {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取文件属性 |
|
|
|
|
* |
|
|
|
|
* @param url url |
|
|
|
|
* @return 文件属性 |
|
|
|
|
*/ |
|
|
|
|
public FileAttribute getFileAttribute(String url) { |
|
|
|
|
String fileName; |
|
|
|
|
FileType type; |
|
|
|
|
public FileAttribute getFileAttribute(String url, HttpServletRequest req) { |
|
|
|
|
FileAttribute attribute = new FileAttribute(); |
|
|
|
|
String suffix; |
|
|
|
|
String fullFileName = getUrlParameterReg(url, "fullfilename"); |
|
|
|
|
if (StringUtils.hasText(fullFileName)) { |
|
|
|
|
fileName = fullFileName; |
|
|
|
|
type = typeFromFileName(fileName); |
|
|
|
|
suffix = suffixFromFileName(fileName); |
|
|
|
|
attribute.setName(fullFileName); |
|
|
|
|
FileType type = typeFromFileName(fullFileName); |
|
|
|
|
attribute.setType(type); |
|
|
|
|
suffix = suffixFromFileName(fullFileName); |
|
|
|
|
} else { |
|
|
|
|
fileName = getFileNameFromURL(url); |
|
|
|
|
type = typeFromUrl(url); |
|
|
|
|
|
|
|
|
|
String fileName = getFileNameFromURL(url); |
|
|
|
|
FileType type = typeFromUrl(url); |
|
|
|
|
attribute.setName(fileName); |
|
|
|
|
attribute.setType(type); |
|
|
|
|
suffix = suffixFromUrl(url); |
|
|
|
|
} |
|
|
|
|
return new FileAttribute(type,suffix,fileName,url); |
|
|
|
|
attribute.setSuffix(suffix); |
|
|
|
|
if (req != null) { |
|
|
|
|
String officePreviewType = req.getParameter("officePreviewType"); |
|
|
|
|
|
|
|
|
|
attribute.setOfficePreviewType(officePreviewType); |
|
|
|
|
} |
|
|
|
|
return attribute; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|