⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databasemanageaction.java

📁 论坛软件系统亦称电子公告板(BBS)系统
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
					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/>如需要打开此功能请在 论坛安全&nbsp;&raquo;&nbsp;基本设置 修改相关安全配置信息。");
			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 + -