Browse Source

增加返回运行主机ip的字段

master
453530270@qq.com 2 years ago
parent
commit
557919f6eb
  1. 2
      fss/config/config.go
  2. 2
      fss/core/serverinfo.go
  3. BIN
      fss/fss
  4. 364
      fss/fsw/bak/index.html
  5. 413
      fss/fsw/bak/step2.html
  6. 413
      fss/fsw/bak/step3.html
  7. 108
      fss/fsw/index.html
  8. 6
      fss/main.go

2
fss/config/config.go

@ -16,7 +16,7 @@ type Config struct {
var G Config
// 本地ip
func getLocalIP() (string, error) {
func GetLocalIP() (string, error) {
addrs, err := net.InterfaceAddrs()
if err != nil {
return "", err

2
fss/core/serverinfo.go

@ -18,6 +18,7 @@ type Response struct {
Data FilesListJson `json:"data"` //目录下的文件
Curdir string `json:"curdir"` // 扫描的目录
WorksDir string `json:"workdir"` //监听目录
Hostip string `json:"hostip"` //运行的主机ip
}
// 文件输出的结构
@ -112,6 +113,7 @@ func SerInfo(w http.ResponseWriter, r *http.Request) {
Status: "success",
Curdir: urlpath,
WorksDir: config.G.FilePath,
Hostip: config.G.LocalIP,
Data: flist,
}

BIN
fss/fss

Binary file not shown.

364
fss/fsw/bak/index.html

@ -0,0 +1,364 @@
<!DOCTYPE html>
<html>
<head>
<title>文件更新控制台</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./static/css/bootstrap.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico?v=2">
<script type="text/javascript" src="./static/js/jquery.min.js"></script>
<script type="text/javascript" src="./static/js/bootstrap.min.js"></script>
<style>
.list-group>.list-group-item {
padding: 20px;
}
.optzone {
height: 60px;
}
.stabox {
height: 260px;
overflow: scroll;
}
.flist {
height: 360px;
overflow: auto;
}
.icon {
display: inline-block;
width: 24px;
height: 24px;
}
.hsval {
font-size: 10px;
margin-left: 16px;
}
.hschange {
/* background-color: #dabd16; */
background: linear-gradient(0deg, #dabd16 60%, transparent 20%);
}
.hschange a {
color: #fff !important;
}
.hschange .icon:hover {
cursor: pointer;
background-color: #fff;
}
.folder-icon {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xMCA0SDRDMi45IDQgMiA0LjkgMiA2VjE4QzIgMTkuMSAyLjkgMjAgNCAyMEgyMEMyMS4xIDIwIDIyIDE5LjEgMjIgMThWOEMyMiA2LjkgMjEuMSA2IDIwIDZIMTJMMTAgNFoiIC8+PC9zdmc+");
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xMCA0SDRDMi45IDQgMiA0LjkgMiA2VjE4QzIgMTkuMSAyLjkgMjAgNCAyMEgyMEMyMS4xIDIwIDIyIDE5LjEgMjIgMThWOEMyMiA2LjkgMjEuMSA2IDIwIDZIMTJMMTAgNFoiIC8+PC9zdmc+");
background-color: #c1972e;
}
.file-icon {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xNCAySDZDNC45IDIgNCAyLjkgNCA0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWOEwxNCAyTTEzIDlWMy41TDE4LjUgOUgxM1oiIC8+IDwvc3ZnPg==");
-webkit-mask-imagee: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xNCAySDZDNC45IDIgNCAyLjkgNCA0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWOEwxNCAyTTEzIDlWMy41TDE4LjUgOUgxM1oiIC8+IDwvc3ZnPg==");
background-repeat: no-repeat;
background-color: #0e0b8b;
}
#rstatus {
height: 360px;
overflow-y: auto;
}
</style>
</head>
<body>
<div class="jumbotron">
<div class="container">
<p>文件更新控制台</p>
<p>ver:3.04</p>
</div>
</div>
<!-- 输入服务器ip -->
<div class="container">
<div class="form-group col-md-6">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="sip" id="scip" placeholder="eg:192.168.66.99">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">监视目录</div>
<input type="text" class="form-control" name="sdir" placeholder="eg :/www/wwwroot/aa_com/" />
</div>
</div>
<div class="form-group col-md-12">
<button type="button" id="entsip" class="btn btn-primary">查看信息</button>
</div>
</div>
<!-- 罗列文件的列表信息 -->
<div class="container">
<!-- 源服务器 -->
<div class="col-md-12">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading" id="ssip">源站</div>
<div class="panel-body">
<p>监听目录:<span class="sc01"></span></p>
<p>相对目录: <span class="sc02"></span> </p>
<div class="col-md-12">
<a href="javascript:void(0);" class="btn btn-success btn-sm" id="slall" data-st="ss">全选</a>
<a href="javascript:void(0);" class="btn btn-info btn-sm" id="sybtn" data-st="ss">同步</a>
</div>
</div>
<!-- List group -->
<form action="/sendZip" method="post" class="ssform">
<ul class="list-group" id="scsc"></ul>
</form>
</div>
</div>
</div>
<script type="text/javascript">
var chkall = true;
var chknum = 0;
var scip = ""; //目标服务器ip
var urlpath = ".";// 当前的操作目录
var chkarr = new Array; //选中的文件或目录
//var bfsarr = new Array; // base file infomation array
$(function () {
// read sessionStorage
var oscip = sessionStorage.getItem("scip");
var otip = sessionStorage.getItem("tscip");
if (oscip != "" || otip != '') {
$("input[name='sip']").val(oscip);
$("input[name='tsip']").val(otip);
}
// click function SOURCE SERVER
$("#entsip").on("click", function () {
scfs("ss");
})
// 目标服务器的文件信息
// st 源站 或 目标站
var scfs = function (st) {
//
scip = $("input[name='sip']").val();
// ip storage
sessionStorage.setItem("scip", scip);
//监视目录
var jsdir = $("input[name='sdir']").val();
if (jsdir != '') {
urlpath = bsrqst(jsdir)
//urlpath = encodeURIComponent(btoa(jsdir));
} else {
urlpath = bsrqst(".")
}
// 输入框也显示东西
$("input[name='sdir']").val(urlpath);
$("input[name='tsdir']").val(urlpath)
//
var html = "<li class=\"list-group-item\">输入源服务器" + scip + "</li>";
$("#ssip").text("源站(" + scip + ")");
// 获取信息
gescinfo("#scsc", scip, urlpath,st);
//
$("#rstatus").append(html);
}
// button click function for TARGET SERVER
$("#tentsip").on("click", function () {
$("#mbip").text("目标站(" + scip + ")");
tgfs("tg");
})
// 目标服务器的文件信息
var tgfs = function (st) {
tsip = $("input[name='tsip']").val();
// ip storage
sessionStorage.setItem("tscip", tsip);
//
var html = "<li class=\"list-group-item\">输入目标服务器" + tsip + "</li>";
// 目标站
$("#mbip").text("目标站(" + tsip + ")");
// 获取信息
gescinfo("#tgsc", tsip, urlpath,st);
//
$("#rstatus").append(html);
}
// 获取目标服务器的信息
var gescinfo = function (elemnt, scip, upath,st) {
upath = upath.replace("/\\/g", "\/");
var url=""; // 客户端的状态地址
if(scip=='' || scip=='127.0.0.1' || scip=="localhost"){
url="./sc?p="+upath;
}else{
url = "http://" + scip + ":9099/sc?p=" + upath;
}
//
var html = "";
$.getJSON(url, function (res) {
//
var chgflag;
$.each(res.data.list, function (k, v) {
// 不存在这个字段的话
if(typeof(v.rehash) != 'undefined'){
chgflag = ""
}
// 判读是否存在 变化
if (!v.dirflag) {
// hash相同,未修改
chgflag = v.rehash == v.hash ? " nochage" : " hschange";
} else {
chgflag = ""
}
//
html += "<li class=\"list-group-item optzone " + chgflag + "\"><div class=\"col-md-10\">";
html += "<input type=\"checkbox\" class="+st+'mfile'+" name=\"sfiles\" value=" + v.fname + " />";
if (v.dirflag) { //如果是文件夹
html += "<span class=\"icon folder-icon\"></span>" ;
html += v.fname
// html += "<a href=\"javascript:void(0);\" onclick='"+getDirList(elemnt, scip,v.fname)+"'>"+v.fname +"</a>";
html += "</div>";
} else {
html += "<span class=\"icon file-icon\"></span>" +
"<a href=\"javascript:void(0);\" hsval='" + v.hash + "' bhasval='"
+ v.rehash + "'>"
+ v.fname + "</a></div>";
}
// if (v.isbackup == 1) {
// html += "<div class=\"col-md-2\"><a href=\"#\" class=\"btn btn-warning btn-sm\">恢复</a></div>";
// } else {
// html += "<div class=\"col-md-2\"></div>";
// }
html += "</li>";
})
// append to html
html += "<input type='hidden' name='curpath' value='"+upath+"'>";
if(st=="tg"){
html += "<input type='hidden' name='serverip' value='"+scip+"'>";
}else{
html += "<input type='hidden' name='serverip' value='192.168.66.16'>";
}
// $("#tgsc").html(html)
$(elemnt).html(html);
writelog(scip + "获取数据:" + res.data.list.length + "条数据")
// 客户端监控目录
$(elemnt).parent().find(".sc01").text(res.workdir)
$(elemnt).parent().find(".sc02").text(dbsresp(res.curdir))
});
}
// write log
var writelog = function (html) {
var hprex = "<li class=\"list-group-item\">" + html + "</li>";
$("#rstatus").append(hprex);
}
//全选按钮设置点击事件
$("#slall").click(function () {
let st = $(this).data("st");
//1、循环设置其它多选框选中状态,跟标识用的变量一样
$("."+st+"mfile").prop("checked", chkall);
// down button toggle
if (chkall || chknum > 2) {
chknum += 1
} else {
chknum -= 1
}
//2、标识的变量取反
chkall = !chkall;
})
//同步操作
$("#sybtn").on("click", function () {
// var st = $(this).data("st")
// $(".ssform").submit();
// var ss = $("."+st+"mfile").hasClass("checked").val()
// console.log(ss)
// 获取选中的文件 或者文件夹
// chkarr.push($("input[name='sfiles[]']:checked").val());
// console.log(chkarr)
// var ss = $("input[name='sfiles[]']:checked").val();
//var ss = $(".mfile").has("checked").val()
// console.log(ss)
var ttsip = $("input[name='tsip']").val();
if (ttsip == "") {
alert("老天鹅,你还没填写目标服务器地址。");
} else {
// 提交表单
$(".ssform").submit();
}
});
// 勾选是否同步的选项
$("#sw_sybtn").on("click", function () {
let swval = $(this).has("checked").val();
// 设置相反的值
alert(swval);
});
//base64 编码防止请求错误
var bsrqst = function (path) {
return encodeURIComponent(btoa(path));
}
//解码base64
var dbsresp = function (bsStr) {
// console.log("respone base64 string ", bsStr)
if (bsStr == ".") {
return "."
} else {
return decodeURIComponent(atob(bsStr))
}
}
// 另外的base64的解码
function safeAtob(base64Str) {
// 检查输入字符串是否是有效的Base64编码
const base64Regex = /^[A-Za-z0-9+/]+={0,2}$/;
if (!base64Regex.test(base64Str)) {
throw new Error('The string to be decoded is not correctly encoded.');
}
// 如果输入字符串长度不是4的倍数,添加等号'='
while (base64Str.length % 4 !== 0) {
base64Str += '=';
}
return atob(base64Str);
}
});
</script>
</body>
</html>

413
fss/fsw/bak/step2.html

@ -0,0 +1,413 @@
<!DOCTYPE html>
<html>
<head>
<title>文件更新控制台</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./static/css/bootstrap.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico?v=2">
<script type="text/javascript" src="./static/js/jquery.min.js"></script>
<script type="text/javascript" src="./static/js/bootstrap.min.js"></script>
<style>
.list-group>.list-group-item {
padding: 20px;
}
.optzone {
height: 60px;
}
.stabox {
height: 260px;
overflow: scroll;
}
.flist {
height: 360px;
overflow: auto;
}
.icon {
display: inline-block;
width: 24px;
height: 24px;
}
.hsval {
font-size: 10px;
margin-left: 16px;
}
.hschange {
/* background-color: #dabd16; */
background: linear-gradient(0deg, #dabd16 60%, transparent 20%);
}
.hschange a {
color: #fff !important;
}
.hschange .icon:hover {
cursor: pointer;
background-color: #fff;
}
.folder-icon {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xMCA0SDRDMi45IDQgMiA0LjkgMiA2VjE4QzIgMTkuMSAyLjkgMjAgNCAyMEgyMEMyMS4xIDIwIDIyIDE5LjEgMjIgMThWOEMyMiA2LjkgMjEuMSA2IDIwIDZIMTJMMTAgNFoiIC8+PC9zdmc+");
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xMCA0SDRDMi45IDQgMiA0LjkgMiA2VjE4QzIgMTkuMSAyLjkgMjAgNCAyMEgyMEMyMS4xIDIwIDIyIDE5LjEgMjIgMThWOEMyMiA2LjkgMjEuMSA2IDIwIDZIMTJMMTAgNFoiIC8+PC9zdmc+");
background-color: #c1972e;
}
.file-icon {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xNCAySDZDNC45IDIgNCAyLjkgNCA0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWOEwxNCAyTTEzIDlWMy41TDE4LjUgOUgxM1oiIC8+IDwvc3ZnPg==");
-webkit-mask-imagee: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xNCAySDZDNC45IDIgNCAyLjkgNCA0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWOEwxNCAyTTEzIDlWMy41TDE4LjUgOUgxM1oiIC8+IDwvc3ZnPg==");
background-repeat: no-repeat;
background-color: #0e0b8b;
}
#rstatus {
height: 360px;
overflow-y: auto;
}
</style>
</head>
<body>
<div class="jumbotron">
<div class="container">
<p>文件更新控制台</p>
<p>ver:3.04</p>
</div>
</div>
<!-- 输入服务器ip -->
<div class="container">
<div class="form-group col-md-6">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="sip" id="scip" placeholder="eg:192.168.66.99">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">监视目录</div>
<input type="text" class="form-control" name="sdir" placeholder="eg :/www/wwwroot/aa_com/" />
</div>
</div>
<div class="form-group col-md-12">
<button type="button" id="entsip" class="btn btn-primary">查看信息</button>
</div>
</div>
<!-- 罗列文件的列表信息 -->
<div class="container">
<!-- 源服务器 -->
<div class="col-md-12">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading" id="ssip">源站</div>
<div class="panel-body">
<p>监听目录:<span class="sc01"></span></p>
<p>相对目录: <span class="sc02"></span> </p>
<div class="col-md-12">
<a href="javascript:void(0);" class="btn btn-success btn-sm" id="slall" data-st="ss">全选</a>
<a href="javascript:void(0);" class="btn btn-info btn-sm" id="sybtn" data-st="ss">同步</a>
</div>
</div>
<!-- List group -->
<form action="/sendZip" method="post" class="ssform">
<ul class="list-group" id="scsc"></ul>
</form>
</div>
</div>
</div>
<!-- 目标服务器 -->
<div class="container">
<!-- 目标的服务器信息 -->
<div class="form-group col-md-6">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="tsip" id="tcip" placeholder="eg:192.168.66.99">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">监视目录</div>
<input type="text" class="form-control" name="tsdir" id="" placeholder="eg :/www/wwwroot/aa_com/" />
</div>
</div>
<div class="form-group col-md-12">
<button type="button" id="tentsip" class="btn btn-primary">查看信息</button>
</div>
<!-- 目标服务器 -->
<div class="col-md-12">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading" id="mbip">目标服务器</div>
<div class="panel-body">
<p>监听目录:<span id="sc01" class="sc01"></span></p>
<p>相对目录: <span id="sc02" class="sc02"></span> </p>
</div>
<!-- List group -->
<ul class="list-group" id="tgsc">
</ul>
</div>
</div>
</div>
<!-- 状态信息 -->
<div class="container">
<div class="col-md-12">
<p>1、获取远程服务器的文件信息,2、校验hash值3、枚举出所有hash不同的文件4、勾选文件更新即可5、根据勾选的文件制作更新zip文件,发送到目标服务器。文件的参考HASH值,如何同步到几个平台?</p>
</div>
<div class="panel">
<div class="panel-heading">运行状态</div>
<div class="panel-body">
<ul class="list-group" id="rstatus"></ul>
</div>
</div>
</div>
<script type="text/javascript">
var chkall = true;
var chknum = 0;
var scip = ""; //目标服务器ip
var urlpath = ".";// 当前的操作目录
var chkarr = new Array; //选中的文件或目录
//var bfsarr = new Array; // base file infomation array
$(function () {
// read sessionStorage
var oscip = sessionStorage.getItem("scip");
var otip = sessionStorage.getItem("tscip");
if (oscip != "" || otip != '') {
$("input[name='sip']").val(oscip);
$("input[name='tsip']").val(otip);
}
// click function SOURCE SERVER
$("#entsip").on("click", function () {
scfs("ss");
})
// 目标服务器的文件信息
// st 源站 或 目标站
var scfs = function (st) {
//
scip = $("input[name='sip']").val();
// ip storage
sessionStorage.setItem("scip", scip);
//监视目录
var jsdir = $("input[name='sdir']").val();
if (jsdir != '') {
urlpath = bsrqst(jsdir)
//urlpath = encodeURIComponent(btoa(jsdir));
} else {
urlpath = bsrqst(".")
}
// 输入框也显示东西
$("input[name='sdir']").val(urlpath);
$("input[name='tsdir']").val(urlpath)
//
var html = "<li class=\"list-group-item\">输入源服务器" + scip + "</li>";
$("#ssip").text("源站(" + scip + ")");
// 获取信息
gescinfo("#scsc", scip, urlpath,st);
//
$("#rstatus").append(html);
}
// button click function for TARGET SERVER
$("#tentsip").on("click", function () {
$("#mbip").text("目标站(" + scip + ")");
tgfs("tg");
})
// 目标服务器的文件信息
var tgfs = function (st) {
tsip = $("input[name='tsip']").val();
// ip storage
sessionStorage.setItem("tscip", tsip);
//
var html = "<li class=\"list-group-item\">输入目标服务器" + tsip + "</li>";
// 目标站
$("#mbip").text("目标站(" + tsip + ")");
// 获取信息
gescinfo("#tgsc", tsip, urlpath,st);
//
$("#rstatus").append(html);
}
// 获取目标服务器的信息
var gescinfo = function (elemnt, scip, upath,st) {
upath = upath.replace("/\\/g", "\/");
var url=""; // 客户端的状态地址
if(scip=='' || scip=='127.0.0.1' || scip=="localhost"){
url="./sc?p="+upath;
}else{
url = "http://" + scip + ":9099/sc?p=" + upath;
}
//
var html = "";
$.getJSON(url, function (res) {
//
var chgflag;
$.each(res.data.list, function (k, v) {
// 不存在这个字段的话
if(typeof(v.rehash) != 'undefined'){
chgflag = ""
}
// 判读是否存在 变化
if (!v.dirflag) {
// hash相同,未修改
chgflag = v.rehash == v.hash ? " nochage" : " hschange";
} else {
chgflag = ""
}
//
html += "<li class=\"list-group-item optzone " + chgflag + "\"><div class=\"col-md-10\">";
html += "<input type=\"checkbox\" class="+st+'mfile'+" name=\"sfiles\" value=" + v.fname + " />";
if (v.dirflag) { //如果是文件夹
html += "<span class=\"icon folder-icon\"></span>" ;
html += v.fname
// html += "<a href=\"javascript:void(0);\" onclick='"+getDirList(elemnt, scip,v.fname)+"'>"+v.fname +"</a>";
html += "</div>";
} else {
html += "<span class=\"icon file-icon\"></span>" +
"<a href=\"javascript:void(0);\" hsval='" + v.hash + "' bhasval='"
+ v.rehash + "'>"
+ v.fname + "</a></div>";
}
// if (v.isbackup == 1) {
// html += "<div class=\"col-md-2\"><a href=\"#\" class=\"btn btn-warning btn-sm\">恢复</a></div>";
// } else {
// html += "<div class=\"col-md-2\"></div>";
// }
html += "</li>";
})
// append to html
html += "<input type='hidden' name='curpath' value='"+upath+"'>";
if(st=="tg"){
html += "<input type='hidden' name='serverip' value='"+scip+"'>";
}else{
html += "<input type='hidden' name='serverip' value='192.168.66.16'>";
}
// $("#tgsc").html(html)
$(elemnt).html(html);
writelog(scip + "获取数据:" + res.data.list.length + "条数据")
// 客户端监控目录
$(elemnt).parent().find(".sc01").text(res.workdir)
$(elemnt).parent().find(".sc02").text(dbsresp(res.curdir))
});
}
// write log
var writelog = function (html) {
var hprex = "<li class=\"list-group-item\">" + html + "</li>";
$("#rstatus").append(hprex);
}
//全选按钮设置点击事件
$("#slall").click(function () {
let st = $(this).data("st");
//1、循环设置其它多选框选中状态,跟标识用的变量一样
$("."+st+"mfile").prop("checked", chkall);
// down button toggle
if (chkall || chknum > 2) {
chknum += 1
} else {
chknum -= 1
}
//2、标识的变量取反
chkall = !chkall;
})
//同步操作
$("#sybtn").on("click", function () {
// var st = $(this).data("st")
// $(".ssform").submit();
// var ss = $("."+st+"mfile").hasClass("checked").val()
// console.log(ss)
// 获取选中的文件 或者文件夹
// chkarr.push($("input[name='sfiles[]']:checked").val());
// console.log(chkarr)
// var ss = $("input[name='sfiles[]']:checked").val();
//var ss = $(".mfile").has("checked").val()
// console.log(ss)
var ttsip = $("input[name='tsip']").val();
if (ttsip == "") {
alert("老天鹅,你还没填写目标服务器地址。");
} else {
// 提交表单
$(".ssform").submit();
}
});
// 勾选是否同步的选项
$("#sw_sybtn").on("click", function () {
let swval = $(this).has("checked").val();
// 设置相反的值
alert(swval);
});
//base64 编码防止请求错误
var bsrqst = function (path) {
return encodeURIComponent(btoa(path));
}
//解码base64
var dbsresp = function (bsStr) {
// console.log("respone base64 string ", bsStr)
if (bsStr == ".") {
return "."
} else {
return decodeURIComponent(atob(bsStr))
}
}
// 另外的base64的解码
function safeAtob(base64Str) {
// 检查输入字符串是否是有效的Base64编码
const base64Regex = /^[A-Za-z0-9+/]+={0,2}$/;
if (!base64Regex.test(base64Str)) {
throw new Error('The string to be decoded is not correctly encoded.');
}
// 如果输入字符串长度不是4的倍数,添加等号'='
while (base64Str.length % 4 !== 0) {
base64Str += '=';
}
return atob(base64Str);
}
});
</script>
</body>
</html>

413
fss/fsw/bak/step3.html

@ -0,0 +1,413 @@
<!DOCTYPE html>
<html>
<head>
<title>文件更新控制台</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./static/css/bootstrap.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico?v=2">
<script type="text/javascript" src="./static/js/jquery.min.js"></script>
<script type="text/javascript" src="./static/js/bootstrap.min.js"></script>
<style>
.list-group>.list-group-item {
padding: 20px;
}
.optzone {
height: 60px;
}
.stabox {
height: 260px;
overflow: scroll;
}
.flist {
height: 360px;
overflow: auto;
}
.icon {
display: inline-block;
width: 24px;
height: 24px;
}
.hsval {
font-size: 10px;
margin-left: 16px;
}
.hschange {
/* background-color: #dabd16; */
background: linear-gradient(0deg, #dabd16 60%, transparent 20%);
}
.hschange a {
color: #fff !important;
}
.hschange .icon:hover {
cursor: pointer;
background-color: #fff;
}
.folder-icon {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xMCA0SDRDMi45IDQgMiA0LjkgMiA2VjE4QzIgMTkuMSAyLjkgMjAgNCAyMEgyMEMyMS4xIDIwIDIyIDE5LjEgMjIgMThWOEMyMiA2LjkgMjEuMSA2IDIwIDZIMTJMMTAgNFoiIC8+PC9zdmc+");
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xMCA0SDRDMi45IDQgMiA0LjkgMiA2VjE4QzIgMTkuMSAyLjkgMjAgNCAyMEgyMEMyMS4xIDIwIDIyIDE5LjEgMjIgMThWOEMyMiA2LjkgMjEuMSA2IDIwIDZIMTJMMTAgNFoiIC8+PC9zdmc+");
background-color: #c1972e;
}
.file-icon {
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xNCAySDZDNC45IDIgNCAyLjkgNCA0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWOEwxNCAyTTEzIDlWMy41TDE4LjUgOUgxM1oiIC8+IDwvc3ZnPg==");
-webkit-mask-imagee: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyAgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pZFlNaWQgbWVldCcgIHZpZXdCb3g9IjAgMCAyNCAyNCIgPjxwYXRoIGQ9Ik0xNCAySDZDNC45IDIgNCAyLjkgNCA0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWOEwxNCAyTTEzIDlWMy41TDE4LjUgOUgxM1oiIC8+IDwvc3ZnPg==");
background-repeat: no-repeat;
background-color: #0e0b8b;
}
#rstatus {
height: 360px;
overflow-y: auto;
}
</style>
</head>
<body>
<div class="jumbotron">
<div class="container">
<p>文件更新控制台</p>
<p>ver:3.04</p>
</div>
</div>
<!-- 输入服务器ip -->
<div class="container">
<div class="form-group col-md-6">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="sip" id="scip" placeholder="eg:192.168.66.99">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">监视目录</div>
<input type="text" class="form-control" name="sdir" placeholder="eg :/www/wwwroot/aa_com/" />
</div>
</div>
<div class="form-group col-md-12">
<button type="button" id="entsip" class="btn btn-primary">查看信息</button>
</div>
</div>
<!-- 罗列文件的列表信息 -->
<div class="container">
<!-- 源服务器 -->
<div class="col-md-12">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading" id="ssip">源站</div>
<div class="panel-body">
<p>监听目录:<span class="sc01"></span></p>
<p>相对目录: <span class="sc02"></span> </p>
<div class="col-md-12">
<a href="javascript:void(0);" class="btn btn-success btn-sm" id="slall" data-st="ss">全选</a>
<a href="javascript:void(0);" class="btn btn-info btn-sm" id="sybtn" data-st="ss">同步</a>
</div>
</div>
<!-- List group -->
<form action="/sendZip" method="post" class="ssform">
<ul class="list-group" id="scsc"></ul>
</form>
</div>
</div>
</div>
<!-- 目标服务器 -->
<div class="container">
<!-- 目标的服务器信息 -->
<div class="form-group col-md-6">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="tsip" id="tcip" placeholder="eg:192.168.66.99">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">监视目录</div>
<input type="text" class="form-control" name="tsdir" id="" placeholder="eg :/www/wwwroot/aa_com/" />
</div>
</div>
<div class="form-group col-md-12">
<button type="button" id="tentsip" class="btn btn-primary">查看信息</button>
</div>
<!-- 目标服务器 -->
<div class="col-md-12">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading" id="mbip">目标服务器</div>
<div class="panel-body">
<p>监听目录:<span id="sc01" class="sc01"></span></p>
<p>相对目录: <span id="sc02" class="sc02"></span> </p>
</div>
<!-- List group -->
<ul class="list-group" id="tgsc">
</ul>
</div>
</div>
</div>
<!-- 状态信息 -->
<div class="container">
<div class="col-md-12">
<p>1、获取远程服务器的文件信息,2、校验hash值3、枚举出所有hash不同的文件4、勾选文件更新即可5、根据勾选的文件制作更新zip文件,发送到目标服务器。文件的参考HASH值,如何同步到几个平台?</p>
</div>
<div class="panel">
<div class="panel-heading">运行状态</div>
<div class="panel-body">
<ul class="list-group" id="rstatus"></ul>
</div>
</div>
</div>
<script type="text/javascript">
var chkall = true;
var chknum = 0;
var scip = ""; //目标服务器ip
var urlpath = ".";// 当前的操作目录
var chkarr = new Array; //选中的文件或目录
//var bfsarr = new Array; // base file infomation array
$(function () {
// read sessionStorage
var oscip = sessionStorage.getItem("scip");
var otip = sessionStorage.getItem("tscip");
if (oscip != "" || otip != '') {
$("input[name='sip']").val(oscip);
$("input[name='tsip']").val(otip);
}
// click function SOURCE SERVER
$("#entsip").on("click", function () {
scfs("ss");
})
// 目标服务器的文件信息
// st 源站 或 目标站
var scfs = function (st) {
//
scip = $("input[name='sip']").val();
// ip storage
sessionStorage.setItem("scip", scip);
//监视目录
var jsdir = $("input[name='sdir']").val();
if (jsdir != '') {
urlpath = bsrqst(jsdir)
//urlpath = encodeURIComponent(btoa(jsdir));
} else {
urlpath = bsrqst(".")
}
// 输入框也显示东西
$("input[name='sdir']").val(urlpath);
$("input[name='tsdir']").val(urlpath)
//
var html = "<li class=\"list-group-item\">输入源服务器" + scip + "</li>";
$("#ssip").text("源站(" + scip + ")");
// 获取信息
gescinfo("#scsc", scip, urlpath,st);
//
$("#rstatus").append(html);
}
// button click function for TARGET SERVER
$("#tentsip").on("click", function () {
$("#mbip").text("目标站(" + scip + ")");
tgfs("tg");
})
// 目标服务器的文件信息
var tgfs = function (st) {
tsip = $("input[name='tsip']").val();
// ip storage
sessionStorage.setItem("tscip", tsip);
//
var html = "<li class=\"list-group-item\">输入目标服务器" + tsip + "</li>";
// 目标站
$("#mbip").text("目标站(" + tsip + ")");
// 获取信息
gescinfo("#tgsc", tsip, urlpath,st);
//
$("#rstatus").append(html);
}
// 获取目标服务器的信息
var gescinfo = function (elemnt, scip, upath,st) {
upath = upath.replace("/\\/g", "\/");
var url=""; // 客户端的状态地址
if(scip=='' || scip=='127.0.0.1' || scip=="localhost"){
url="./sc?p="+upath;
}else{
url = "http://" + scip + ":9099/sc?p=" + upath;
}
//
var html = "";
$.getJSON(url, function (res) {
//
var chgflag;
$.each(res.data.list, function (k, v) {
// 不存在这个字段的话
if(typeof(v.rehash) != 'undefined'){
chgflag = ""
}
// 判读是否存在 变化
if (!v.dirflag) {
// hash相同,未修改
chgflag = v.rehash == v.hash ? " nochage" : " hschange";
} else {
chgflag = ""
}
//
html += "<li class=\"list-group-item optzone " + chgflag + "\"><div class=\"col-md-10\">";
html += "<input type=\"checkbox\" class="+st+'mfile'+" name=\"sfiles\" value=" + v.fname + " />";
if (v.dirflag) { //如果是文件夹
html += "<span class=\"icon folder-icon\"></span>" ;
html += v.fname
// html += "<a href=\"javascript:void(0);\" onclick='"+getDirList(elemnt, scip,v.fname)+"'>"+v.fname +"</a>";
html += "</div>";
} else {
html += "<span class=\"icon file-icon\"></span>" +
"<a href=\"javascript:void(0);\" hsval='" + v.hash + "' bhasval='"
+ v.rehash + "'>"
+ v.fname + "</a></div>";
}
// if (v.isbackup == 1) {
// html += "<div class=\"col-md-2\"><a href=\"#\" class=\"btn btn-warning btn-sm\">恢复</a></div>";
// } else {
// html += "<div class=\"col-md-2\"></div>";
// }
html += "</li>";
})
// append to html
html += "<input type='hidden' name='curpath' value='"+upath+"'>";
if(st=="tg"){
html += "<input type='hidden' name='serverip' value='"+scip+"'>";
}else{
html += "<input type='hidden' name='serverip' value='192.168.66.16'>";
}
// $("#tgsc").html(html)
$(elemnt).html(html);
writelog(scip + "获取数据:" + res.data.list.length + "条数据")
// 客户端监控目录
$(elemnt).parent().find(".sc01").text(res.workdir)
$(elemnt).parent().find(".sc02").text(dbsresp(res.curdir))
});
}
// write log
var writelog = function (html) {
var hprex = "<li class=\"list-group-item\">" + html + "</li>";
$("#rstatus").append(hprex);
}
//全选按钮设置点击事件
$("#slall").click(function () {
let st = $(this).data("st");
//1、循环设置其它多选框选中状态,跟标识用的变量一样
$("."+st+"mfile").prop("checked", chkall);
// down button toggle
if (chkall || chknum > 2) {
chknum += 1
} else {
chknum -= 1
}
//2、标识的变量取反
chkall = !chkall;
})
//同步操作
$("#sybtn").on("click", function () {
// var st = $(this).data("st")
// $(".ssform").submit();
// var ss = $("."+st+"mfile").hasClass("checked").val()
// console.log(ss)
// 获取选中的文件 或者文件夹
// chkarr.push($("input[name='sfiles[]']:checked").val());
// console.log(chkarr)
// var ss = $("input[name='sfiles[]']:checked").val();
//var ss = $(".mfile").has("checked").val()
// console.log(ss)
var ttsip = $("input[name='tsip']").val();
if (ttsip == "") {
alert("老天鹅,你还没填写目标服务器地址。");
} else {
// 提交表单
$(".ssform").submit();
}
});
// 勾选是否同步的选项
$("#sw_sybtn").on("click", function () {
let swval = $(this).has("checked").val();
// 设置相反的值
alert(swval);
});
//base64 编码防止请求错误
var bsrqst = function (path) {
return encodeURIComponent(btoa(path));
}
//解码base64
var dbsresp = function (bsStr) {
// console.log("respone base64 string ", bsStr)
if (bsStr == ".") {
return "."
} else {
return decodeURIComponent(atob(bsStr))
}
}
// 另外的base64的解码
function safeAtob(base64Str) {
// 检查输入字符串是否是有效的Base64编码
const base64Regex = /^[A-Za-z0-9+/]+={0,2}$/;
if (!base64Regex.test(base64Str)) {
throw new Error('The string to be decoded is not correctly encoded.');
}
// 如果输入字符串长度不是4的倍数,添加等号'='
while (base64Str.length % 4 !== 0) {
base64Str += '=';
}
return atob(base64Str);
}
});
</script>
</body>
</html>

108
fss/fsw/index.html

@ -32,6 +32,7 @@
width: 24px;
height: 24px;
}
.hsval {
font-size: 10px;
margin-left: 16px;
@ -69,6 +70,19 @@
height: 360px;
overflow-y: auto;
}
.sticky {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
z-index: 9;
border-top: 0;
background-color: #fff !important;
padding: 10px 0px;
border-bottom: none;
box-shadow: 0 10px 30px -10px rgb(0 64 128/20%);
}
</style>
</head>
@ -87,7 +101,7 @@
<div class="form-group col-md-6">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="sip" id="scip" placeholder="eg:192.168.66.99">
<input type="text" class="form-control" name="sip" id="scip" value="0.0.0.0" placeholder="eg:192.168.66.99">
</div>
</div>
<div class="form-group">
@ -115,7 +129,7 @@
<p>相对目录: <span class="sc02"></span> </p>
<div class="col-md-12">
<a href="javascript:void(0);" class="btn btn-success btn-sm" id="slall" data-st="ss">全选</a>
<a href="javascript:void(0);" class="btn btn-info btn-sm" id="sybtn" data-st="ss">同步</a>
</div>
</div>
@ -132,7 +146,7 @@
<!-- 目标服务器 -->
<div class="container">
<!-- 目标的服务器信息 -->
<div class="form-group col-md-6">
<div class="form-group col-md-4">
<div class="input-group">
<div class="input-group-addon">服务器ip</div>
<input type="text" class="form-control" name="tsip" id="tcip" placeholder="eg:192.168.66.99">
@ -144,24 +158,9 @@
<input type="text" class="form-control" name="tsdir" id="" placeholder="eg :/www/wwwroot/aa_com/" />
</div>
</div>
<div class="form-group col-md-12">
<button type="button" id="tentsip" class="btn btn-primary">查看信息</button>
</div>
<!-- 目标服务器 -->
<div class="col-md-12">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading" id="mbip">目标服务器</div>
<div class="panel-body">
<p>监听目录:<span id="sc01" class="sc01"></span></p>
<p>相对目录: <span id="sc02" class="sc02"></span> </p>
</div>
<!-- List group -->
<ul class="list-group" id="tgsc">
</ul>
</div>
<div class="form-group">
<a href="javascript:void(0);" class="btn btn-info btn-sm" id="sybtn" data-st="ss">同步</a>
<button class="btn-info btn-sm">同步</button>
</div>
</div>
@ -180,8 +179,33 @@
</div>
<script type="text/javascript">
// add sticky
$(document).ready(function () {
// grab the initial top offset of the navigation
// var stickyNavTop = $('.nav').offset().top;
// console.log(stickyNavTop)
// our function that decides weather the navigation bar should have "fixed" css position or not.
var stickyNav = function () {
var scrollTop = $(window).scrollTop(); // our current vertical position from the top
// if we've scrolled more than the navigation, change its position to fixed to stick to top,
// otherwise change it back to relative
// if (scrollTop > stickyNavTop) {
// $('.nav').addClass('sticky');
// } else {
// $('.nav').removeClass('sticky');
// }
};
stickyNav();
// and run it again every time you scroll
$(window).scroll(function () {
stickyNav();
});
})
</script>
<script type="text/javascript">
var chkall = true;
var chknum = 0;
@ -227,7 +251,7 @@
$("#ssip").text("源站(" + scip + ")");
// 获取信息
gescinfo("#scsc", scip, urlpath,st);
gescinfo("#scsc", scip, urlpath, st);
//
$("#rstatus").append(html);
@ -249,18 +273,18 @@
// 目标站
$("#mbip").text("目标站(" + tsip + ")");
// 获取信息
gescinfo("#tgsc", tsip, urlpath,st);
gescinfo("#tgsc", tsip, urlpath, st);
//
$("#rstatus").append(html);
}
// 获取目标服务器的信息
var gescinfo = function (elemnt, scip, upath,st) {
var gescinfo = function (elemnt, scip, upath, st) {
upath = upath.replace("/\\/g", "\/");
var url=""; // 客户端的状态地址
if(scip=='' || scip=='127.0.0.1' || scip=="localhost"){
url="./sc?p="+upath;
}else{
var url = ""; // 客户端的状态地址
if (scip == '' || scip=="0.0.0.0" || scip == '127.0.0.1' || scip == "localhost") {
url = "./sc?p=" + upath;
} else {
url = "http://" + scip + ":9099/sc?p=" + upath;
}
//
@ -270,7 +294,7 @@
var chgflag;
$.each(res.data.list, function (k, v) {
// 不存在这个字段的话
if(typeof(v.rehash) != 'undefined'){
if (typeof (v.rehash) != 'undefined') {
chgflag = ""
}
// 判读是否存在 变化
@ -283,9 +307,9 @@
//
html += "<li class=\"list-group-item optzone " + chgflag + "\"><div class=\"col-md-10\">";
html += "<input type=\"checkbox\" class="+st+'mfile'+" name=\"sfiles\" value=" + v.fname + " />";
html += "<input type=\"checkbox\" class=" + st + 'mfile' + " name=\"sfiles\" value=" + v.fname + " />";
if (v.dirflag) { //如果是文件夹
html += "<span class=\"icon folder-icon\"></span>" ;
html += "<span class=\"icon folder-icon\"></span>";
html += v.fname
// html += "<a href=\"javascript:void(0);\" onclick='"+getDirList(elemnt, scip,v.fname)+"'>"+v.fname +"</a>";
html += "</div>";
@ -293,8 +317,8 @@
html += "<span class=\"icon file-icon\"></span>" +
"<a href=\"javascript:void(0);\" hsval='" + v.hash + "' bhasval='"
+ v.rehash + "'>"
"<a href=\"javascript:void(0);\" hsval='" + v.hash + "' bhasval='"
+ v.rehash + "'>"
+ v.fname + "</a></div>";
}
@ -308,13 +332,13 @@
html += "</li>";
})
// append to html
html += "<input type='hidden' name='curpath' value='"+upath+"'>";
if(st=="tg"){
html += "<input type='hidden' name='serverip' value='"+scip+"'>";
}else{
html += "<input type='hidden' name='curpath' value='" + upath + "'>";
if (st == "tg") {
html += "<input type='hidden' name='serverip' value='" + scip + "'>";
} else {
html += "<input type='hidden' name='serverip' value='192.168.66.16'>";
}
// $("#tgsc").html(html)
$(elemnt).html(html);
writelog(scip + "获取数据:" + res.data.list.length + "条数据")
@ -334,7 +358,7 @@
$("#slall").click(function () {
let st = $(this).data("st");
//1、循环设置其它多选框选中状态,跟标识用的变量一样
$("."+st+"mfile").prop("checked", chkall);
$("." + st + "mfile").prop("checked", chkall);
// down button toggle
if (chkall || chknum > 2) {
chknum += 1
@ -362,7 +386,7 @@
if (ttsip == "") {
alert("老天鹅,你还没填写目标服务器地址。");
} else {
// 提交表单
$(".ssform").submit();
}

6
fss/main.go

@ -33,12 +33,18 @@ func startWeb() {
// 主函数
func main() {
// 获取ip地址
lcip, err := config.GetLocalIP()
if err != nil {
fmt.Printf("get server ip faild %v", err)
}
// 判断输入
args := os.Args
if args == nil || len(args) < 2 {
fmt.Printf("Usage: ./fss -t /home/\n")
os.Exit(1)
}
config.G.LocalIP = lcip
//
flag := args[1]
if flag == "-t" {

Loading…
Cancel
Save