/*** 下载压缩包
*
*@paramid 商户id
*@paramrequest
*@paramresponse
*@returnvoid
*@authorchen.bing
* @Date 2019/11/4 17:35*/@RequestMapping(value= "downloadzip")public voiddownloadzip(String id, HttpServletRequest request, HttpServletResponse response) {if(StringUtils.isBlank(id)) {
LOG.error("商户id为空");return;
}
String rootZipUrl= Global.getProperty("VOUCHER_IMAGE_DIR");
File rootFile= newFile(rootZipUrl);if (!rootFile.exists()) {
LOG.error("当前文件夹不存在", rootZipUrl);return;
}
String zipUrl=rootZipUrl;
SysMerch sysMerch=sysMerchService.selectById(id);if (sysMerch != null) {
String scheme=request.getScheme();
String contextPath=request.getContextPath();
String serverName=request.getServerName();int port =request.getServerPort();
String basePath= scheme + "://" + serverName + ":" + port +contextPath;
String orgCode=sysMerch.getOrgCode();
String merchNo=sysMerch.getMerchNo();
String merchName=sysMerch.getMerchName();
String merchNameDir= rootZipUrl + File.separator +merchName;
String oldZipUrl= rootZipUrl + File.separator + "downloadZip";boolean b =FileUtils.fileNameRenameTo(oldZipUrl,merchNameDir);
zipUrl=oldZipUrl;if(b) {
zipUrl=merchNameDir;
}
String batUrl= zipUrl + File.separator + "安装包" + File.separator + "setup.txt";
File file= newFile(batUrl);if (!file.exists()) {
File parentFile=file.getParentFile();if (!parentFile.exists()) {
parentFile.mkdirs();
}//不存在创建文件和其父目录
FileUtils.createFile(batUrl);
}
setUpMerchLogo(orgCode, merchNo, merchName, request);
String merchLogoBat= "set wind = ws.createshortcut(strDesktop & \"\\%s.lnk\")";
String url= "wind.Arguments=\"%s\"";
String loginUrl= basePath + "/login?org_code_ck_key=" + orgCode + "&merch_no_ck_key=" +merchNo;
String logoBat=String.format(merchLogoBat, merchName);
String merchUrl=String.format(url, loginUrl);
List list = new LinkedList<>();
list.add("@echo off");
list.add("more %0 +5>%temp%yst.vbs");
list.add("%temp%yst.vbs");
list.add("del %temp%yst.vbs");
list.add("exit");
list.add("set ws = createobject(\"wscript.shell\")");
list.add("strDesktop = ws.SpecialFolders(\"Desktop\")");
list.add(logoBat);
list.add("wind.IconLocation = ws.CurrentDirectory & \"\\favicon.ico\"");
list.add("wind.targetpath = \"%ProgramFiles%\\Internet Explorer\\IEXPLORE.EXE\"");
list.add("wind.workingdirectory = \"%ProgramFiles%\\Internet Explorer\"");
list.add(merchUrl);
list.add("wind.save");
OutputStream outputStream= null;try{//加锁,防止在压缩时有图片写入
synchronized(ZIP_LOCK) {
outputStream= newFileOutputStream(file);//此处循环操作是因为要将.bat文件转换为windows格式
for (int i = 0; i < list.size(); i++) {byte[] bytes = list.get(i).getBytes(Charset.forName("GB2312"));
outputStream.write(bytes);if (i
outputStream.write("\r\n".getBytes(Charset.forName("GB2312")));
}
}
outputStream.close();
String batPath= zipUrl + File.separator + "安装包" + File.separator + "setup.bat";
File batFile= newFile(batPath);
batFile.delete();
FileUtils.fileNameRenameTo(batUrl,batPath);
FileUtils.downloadZip(response, rootZipUrl, merchName);
FileUtils.fileNameRenameTo(merchNameDir, oldZipUrl);file.delete();
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}