Commit ba919266 authored by 赵啸非's avatar 赵啸非

添加服务检测拉起脚本

parent 16e2df0a
......@@ -23,6 +23,7 @@ import com.mortals.xhx.module.app.model.*;
import com.mortals.xhx.module.app.service.*;
import com.mortals.xhx.module.site.model.SiteEntity;
import com.mortals.xhx.module.site.service.SiteService;
import com.mortals.xhx.utils.EncodeUtil;
import com.mortals.xhx.version.model.VersionEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -34,6 +35,7 @@ import com.mortals.xhx.module.app.dao.AppDao;
import org.springframework.util.ObjectUtils;
import java.io.File;
import java.nio.charset.Charset;
import java.util.*;
import java.util.stream.Collectors;
......@@ -130,7 +132,13 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
FileUtil.del(disPath);
}
//ZipUtils.unzip(new File(targetFilePath), disPath);
ZipUtil.unzip(targetFilePath, disPath);
String fileEncode ="UTF-8";
try {
fileEncode = EncodeUtil.getEncode(targetFilePath,true);
} catch (Exception e) {
log.error("异常",e);
}
ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode));
//更新
appEntity.setDistributeFilePath(disPath);
appEntity.setDistribute(YesNoEnum.YES.getValue());
......@@ -158,7 +166,13 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
FileUtil.del(disPath);
}
// ZipUtils.unzip(new File(targetFilePath), disPath);
ZipUtil.unzip(targetFilePath, disPath);
String fileEncode ="UTF-8";
try {
fileEncode = EncodeUtil.getEncode(targetFilePath,true);
} catch (Exception e) {
log.error("异常",e);
}
ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode));
return Rest.ok("基础应用部署成功!");
}
......
......@@ -14,6 +14,7 @@ import com.mortals.xhx.module.app.model.AppVersionQuery;
import com.mortals.xhx.module.app.service.AppService;
import com.mortals.xhx.module.site.model.SiteEntity;
import com.mortals.xhx.module.site.service.SiteService;
import com.mortals.xhx.utils.EncodeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
......@@ -23,6 +24,7 @@ import com.mortals.xhx.module.app.model.AppVersionEntity;
import com.mortals.xhx.module.app.service.AppVersionService;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Date;
......@@ -71,8 +73,14 @@ public class AppVersionServiceImpl extends AbstractCRUDServiceImpl<AppVersionDao
if (FileUtil.isDirectory(disPath)) {
FileUtil.del(disPath);
}
String fileEncode ="UTF-8";
try {
fileEncode = EncodeUtil.getEncode(targetFilePath,true);
} catch (Exception e) {
log.error("异常",e);
}
// ZipUtils.unzip(new File(targetFilePath), disPath);
ZipUtil.unzip(targetFilePath, disPath);
ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode));
return disPath;
}
......
......@@ -2,6 +2,7 @@ package com.mortals.xhx.module.site.service.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.core.util.ZipUtil;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.common.Rest;
......
......@@ -15,6 +15,7 @@ import com.mortals.xhx.module.workman.dao.WorkmanDao;
import com.mortals.xhx.module.workman.model.WorkmanEntity;
import com.mortals.xhx.module.workman.model.WorkmanQuery;
import com.mortals.xhx.module.workman.service.WorkmanService;
import com.mortals.xhx.utils.EncodeUtil;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.formula.functions.T;
......@@ -151,7 +152,13 @@ public class WorkmanServiceImpl extends AbstractCRUDCacheServiceImpl<WorkmanDao,
throw new AppException("文件不存在!");
}
//解压图片
ZipUtil.unzip(targetFilePath, disPath, Charset.forName("GBK"));
String fileEncode ="UTF-8";
try {
fileEncode = EncodeUtil.getEncode(targetFilePath,true);
} catch (Exception e) {
log.error("异常",e);
}
ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode));
//读取目录下的所有图片
File[] files = FileUtil.ls(disPath);
for (File file : files) {
......
package com.mortals.xhx.utils;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.BitSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author 自动识别文件编码格式
*/
public class EncodeUtil {
private static Logger logger = LoggerFactory.getLogger(EncodeUtil.class);
private static int BYTE_SIZE = 8;
public static String CODE_UTF8 = "UTF-8";
public static String CODE_UTF8_BOM = "UTF-8_BOM";
public static String CODE_GBK = "GBK";
/**
* 通过文件全名称获取编码集名称
*
* @param fullFileName
* @param ignoreBom
* @return
* @throws Exception
*/
public static String getEncode(String fullFileName, boolean ignoreBom) throws Exception {
logger.debug("fullFileName ; {}", fullFileName);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fullFileName));
return getEncode(bis, ignoreBom);
}
/**
* 通过文件缓存流获取编码集名称,文件流必须为未曾
*
* @param bis
* @param ignoreBom 是否忽略utf-8 bom
* @return
* @throws Exception
*/
public static String getEncode(BufferedInputStream bis, boolean ignoreBom) throws Exception {
bis.mark(0);
String encodeType = "未识别";
byte[] head = new byte[3];
bis.read(head);
if (head[0] == -1 && head[1] == -2) {
encodeType = "UTF-16";
} else if (head[0] == -2 && head[1] == -1) {
encodeType = "Unicode";
} else if (head[0] == -17 && head[1] == -69 && head[2] == -65) { //带BOM
if (ignoreBom) {
encodeType = CODE_UTF8;
} else {
encodeType = CODE_UTF8_BOM;
}
} else if ("Unicode".equals(encodeType)) {
encodeType = "UTF-16";
} else if (isUTF8(bis)) {
encodeType = CODE_UTF8;
} else {
encodeType = CODE_GBK;
}
logger.info("result encode type : " + encodeType);
return encodeType;
}
/**
* 是否是无BOM的UTF8格式,不判断常规场景,只区分无BOM UTF8和GBK
*
* @param bis
* @return
*/
private static boolean isUTF8(BufferedInputStream bis) throws Exception {
bis.reset();
//读取第一个字节
int code = bis.read();
do {
BitSet bitSet = convert2BitSet(code);
//判断是否为单字节
if (bitSet.get(0)) {//多字节时,再读取N个字节
if (!checkMultiByte(bis, bitSet)) {//未检测通过,直接返回
return false;
}
} else {
//单字节时什么都不用做,再次读取字节
}
code = bis.read();
} while (code != -1);
return true;
}
/**
* 检测多字节,判断是否为utf8,已经读取了一个字节
*
* @param bis
* @param bitSet
* @return
*/
private static boolean checkMultiByte(BufferedInputStream bis, BitSet bitSet) throws Exception {
int count = getCountOfSequential(bitSet);
byte[] bytes = new byte[count - 1];//已经读取了一个字节,不能再读取
bis.read(bytes);
for (byte b : bytes) {
if (!checkUtf8Byte(b)) {
return false;
}
}
return true;
}
/**
* 检测单字节,判断是否为utf8
*
* @param b
* @return
*/
private static boolean checkUtf8Byte(byte b) throws Exception {
BitSet bitSet = convert2BitSet(b);
return bitSet.get(0) && !bitSet.get(1);
}
/**
* 检测bitSet中从开始有多少个连续的1
*
* @param bitSet
* @return
*/
private static int getCountOfSequential(BitSet bitSet) {
int count = 0;
for (int i = 0; i < BYTE_SIZE; i++) {
if (bitSet.get(i)) {
count++;
} else {
break;
}
}
return count;
}
/**
* 将整形转为BitSet
*
* @param code
* @return
*/
private static BitSet convert2BitSet(int code) {
BitSet bitSet = new BitSet(BYTE_SIZE);
for (int i = 0; i < BYTE_SIZE; i++) {
int tmp3 = code >> (BYTE_SIZE - i - 1);
int tmp2 = 0x1 & tmp3;
if (tmp2 == 1) {
bitSet.set(i);
}
}
return bitSet;
}
/**
* 将一指定编码的文件转换为另一编码的文件
*
* @param oldFullFileName
* @param oldCharsetName
* @param newFullFileName
* @param newCharsetName
*/
public static void convert(String oldFullFileName, String oldCharsetName, String newFullFileName, String newCharsetName) throws Exception {
logger.info("the old file name is : {}, The oldCharsetName is : {}", oldFullFileName, oldCharsetName);
logger.info("the new file name is : {}, The newCharsetName is : {}", newFullFileName, newCharsetName);
StringBuffer content = new StringBuffer();
BufferedReader bin = new BufferedReader(new InputStreamReader(new FileInputStream(oldFullFileName), oldCharsetName));
String line;
while ((line = bin.readLine()) != null) {
content.append(line);
content.append(System.getProperty("line.separator"));
}
newFullFileName = newFullFileName.replace("\\", "/");
File dir = new File(newFullFileName.substring(0, newFullFileName.lastIndexOf("/")));
if (!dir.exists()) {
dir.mkdirs();
}
Writer out = new OutputStreamWriter(new FileOutputStream(newFullFileName), newCharsetName);
out.write(content.toString());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment