📄 databasemanageaction.java
字号:
return mapping.findForward("result");
}
}
}
else {
request.setAttribute("errorInfo","Shell 权限被禁止或服务器不支持,无法使用 MySQL Dump 方式备份或恢复数据,请返回。");
return mapping.findForward("error");
}
return this.toExport(mapping, form, request, response);
}
public ActionForward toImport(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
Map<String,String> settings=this.getValues("'admincp_dbimport','backupdir'");
String dbimport = settings.get("admincp_dbimport");
if ("0".equals(dbimport)) {
request.setAttribute("resultInfo","对不起,出于系统安全考虑,论坛管理员关闭了该功能,<br/>如需要打开此功能请在 论坛安全 » 基本设置 修改相关安全配置信息。");
return mapping.findForward("result");
}
String realPath = servlet.getServletContext().getRealPath("/");
String backupdir = this.createBackupdir(realPath,settings.get("backupdir"));
File file = new File(realPath + backupdir);
List<Map<String, String>> dumpfiles = new ArrayList<Map<String, String>>();
File[] files = file.listFiles();
if (files != null&&files.length>0) {
for (File dumpfile : files) {
if (dumpfile.isFile()) {
String filename = dumpfile.getName();
String filepath = backupdir.replace(".", "") + "/"+ filename;
String jsprunversion = "";
String type = "";
String filesize = this.sizeFormat(dumpfile.length());
String method = "";
String volume = "";
if (filename.matches(".*.sql$")) {
String content =null;
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader(dumpfile);
br = new BufferedReader(fr);
content = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
List<String> info = this.getStr(content,"^# Identify:\\s*(\\w+).*");
if (info != null && info.size() > 0) {
String fileInfo = info.get(0);
fileInfo = Base64Decoder.decode(fileInfo.substring(fileInfo.indexOf(":") + 1).trim(), JspRunConfig.charset);
String[] infos = fileInfo.split(",");
if (infos != null) {
jsprunversion = infos[1];
type = infos[2];
method = infos[3];
volume = infos[4];
}
} else {
method = "shell";
}
} else if (filename.matches(".*.zip$")) {
type = "zip";
}
Map<String, String> map = new HashMap<String, String>();
map.put("filename", filename);
map.put("filepath", filepath);
map.put("jsprunversion", jsprunversion);
map.put("dateline", Common.filemtime(request,dumpfile.lastModified()));
map.put("type", type);
map.put("filesize", filesize);
map.put("method", method);
map.put("volume", volume);
dumpfiles.add(map);
}
}
}
request.setAttribute("backupdir", backupdir);
request.setAttribute("dumpfiles", dumpfiles);
request.setAttribute("version",JspRunConfig.version);
return mapping.findForward("toImport");
}
public ActionForward importData(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("resultInfo", "数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。");
return mapping.findForward("result");
}
public ActionForward importFile(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
String realPath = servlet.getServletContext().getRealPath("/");
String deletesubmit = request.getParameter("deletesubmit");
if (deletesubmit != null) {
String[] delete = request.getParameterValues("delete");
if (delete == null) {
request.setAttribute("errorInfo", "您没有选择要删除的备份文件,请返回。");
return mapping.findForward("error");
} else {
String resultInfo = null;
boolean flag = true;
for (String filePath : delete) {
File file = new File(realPath + filePath);
if (file.exists()) {
if (!file.delete()) {
flag = false;
resultInfo = "指定备份文件删除失败。";
break;
}
} else {
flag = false;
resultInfo = "指定备份文件不存在。";
break;
}
}
if (flag) {
resultInfo = "指定备份文件成功删除。";
}
request.setAttribute("resultInfo", resultInfo);
return mapping.findForward("result");
}
}
String importsubmit = request.getParameter("importsubmit");
String confirmed = request.getParameter("confirmed");
if (importsubmit != null || confirmed != null) {
String server = request.getParameter("from");
String autoimport = request.getParameter("autoimport");
String datafile = "";
String datafile_server = request.getParameter("datafile_server");
if ("server".equals(server)) {
datafile = realPath + datafile_server;
}
File dumpfile = new File(datafile);
Map<String, String> dumpinfo = new HashMap<String, String>();
StringBuffer sqldump = new StringBuffer();
if (dumpfile.exists()) {
FileInputStream fis=null;
InputStreamReader isr=null;
BufferedReader br = null;
try {
fis=new FileInputStream(dumpfile);
isr=new InputStreamReader(fis,JspRunConfig.charset);
br = new BufferedReader(isr);
String content = br.readLine();
if (content != null) {
List<String> info = this.getStr(content,"^# Identify:\\s*(\\w+).*");
if (info != null && info.size() > 0) {
String fileInfo = info.get(0);
fileInfo = Base64Decoder.decode(fileInfo.substring(fileInfo.indexOf(":") + 1).trim(),JspRunConfig.charset);
String[] infos = fileInfo.split(",");
if (infos != null) {
dumpinfo.put("method", infos[3]);
dumpinfo.put("volume", infos[4]);
}
}
}
while (content != null) {
if (!content.matches("^#.*")) {
sqldump.append(content);
}
content = br.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
isr.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
if (autoimport != null) {
request.setAttribute("resultInfo", "分卷数据成功导入论坛数据库。");
return mapping.findForward("result");
} else {
request.setAttribute("resultInfo","数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。");
return mapping.findForward("result");
}
}
if ("multivol".equals(dumpinfo.get("method"))) {
if (sqldump.length()>0) {
String[] sqls = sqldump.toString().split(";");
if (sqls != null) {
Map<String,String> resultMap = null;
String errorCode = null;
Members members = (Members)request.getSession().getAttribute("members");
String cMemberName = members == null?"":members.getUsername();
String errorInfo = null;
for (String sql : sqls) {
resultMap = dataBaseService.runQuery(sql + ";");
errorInfo = resultMap.get("error");
if(resultMap!=null && errorInfo!=null){
errorCode = resultMap.get("errorCode");
if(!"1062".equals(errorCode)){
Log.writelog(servlet.getServletContext().getRealPath("/"), "errorlog", (System.currentTimeMillis()/1000)+"\tMySQL\t"+cMemberName+"\t"+dumpfile+" : "+errorInfo +" - "+Common.cutstr(sql, 120, null));
}
}
}
}
}
String delunzip = request.getParameter("delunzip");
if (delunzip != null && dumpfile.exists()) {
dumpfile.delete();
}
int index1 = datafile_server.lastIndexOf("-");
int index2 = datafile_server.lastIndexOf("/");
StringBuffer datafile_next = new StringBuffer(datafile_server);
if (index1 > index2) {
datafile_next = datafile_next.replace(datafile_next.lastIndexOf("-") + 1, datafile_next.lastIndexOf("."), String.valueOf(Integer.valueOf(datafile_next.substring(datafile_next.lastIndexOf("-") + 1, datafile_next.lastIndexOf("."))) + 1));
}
if ("1".equals(dumpinfo.get("volume"))) {
request.setAttribute("confirmInfo","分卷数据成功导入数据库,您需要自动导入本次其它的备份吗?");
request.setAttribute("commitPath",request.getContextPath()+ "/database.do?action=importFile&from=server&datafile_server="+ datafile_next.toString()+ "&autoimport=yes&importsubmit=yes"+ (request.getParameter("delunzip") != null ? "&delunzip=yes": ""));
return mapping.findForward("confirm");
} else if (autoimport != null) {
request.setAttribute("successInfo", "数据文件 #"+ dumpinfo.get("volume") + " 成功导入,程序将自动继续。");
request.setAttribute("requestPath",request.getContextPath()+ "/database.do?action=importFile&from=server&datafile_server="+ datafile_next.toString()+ "&autoimport=yes&importsubmit=yes"+ (request.getParameter("delunzip") != null ? "&delunzip=yes": ""));
return mapping.findForward("success");
} else {
request.setAttribute("resultInfo", "分卷数据成功导入论坛数据库。");
return mapping.findForward("result");
}
} else if ("shell".equals(dumpinfo.get("method"))) {
} else {
request.setAttribute("resultInfo", "数据文件非 JspRun! 格式,无法导入。");
return mapping.findForward("result");
}
}
return this.toImport(mapping, form, request, response);
}
public ActionForward importZipFile(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
String realPath = servlet.getServletContext().getRealPath("/");
String confirmed = request.getParameter("confirmed");
String importsubmit = request.getParameter("importsubmit");
if (importsubmit != null || confirmed != null) {
String autoimport = request.getParameter("autoimport");
String datafile_server = request.getParameter("datafile_server");
String path = datafile_server.substring(0, datafile_server.lastIndexOf("/"));
String zipFileName = realPath + datafile_server;
try {
File zipFile = new File(zipFileName);
if (zipFile.exists()) {
List<String> fileNames = ZipUtil.unZipFile(zipFile);
if (fileNames != null && fileNames.size() > 0) {
File dumpfile = new File(realPath + path + "/"+ fileNames.get(0));
Map<String, String> dumpinfo = null;
if (dumpfile.exists()) {
FileReader fr=null;
BufferedReader br=null;
String content =null;
try {
fr = new FileReader(dumpfile);
br = new BufferedReader(fr);
content = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}finally{
br.close();
fr.close();
}
if (content != null) {
List<String> info = this.getStr(content,"^# Identify:\\s*(\\w+).*");
if (info != null && info.size() > 0) {
String fileInfo = info.get(0);
fileInfo = Base64Decoder.decode(fileInfo.substring(fileInfo.indexOf(":") + 1).trim(),JspRunConfig.charset);
String[] infos = fileInfo.split(",");
if (infos != null) {
dumpinfo = new HashMap<String, String>();
dumpinfo.put("jsprunversion",infos[1]);
dumpinfo.put("type", infos[2]);
dumpinfo.put("method", infos[3]);
dumpinfo.put("volume", infos[4]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -