mirror of https://github.com/midoks/mdserver-web
parent
a147ef6962
commit
c94838462c
@ -0,0 +1,208 @@ |
||||
# coding:utf-8 |
||||
|
||||
''' |
||||
doc: https://docs.python.org/zh-cn/3/library/ftplib.html |
||||
''' |
||||
|
||||
import sys |
||||
import io |
||||
import os |
||||
import time |
||||
import re |
||||
import json |
||||
|
||||
import paramiko |
||||
import ftplib |
||||
|
||||
sys.path.append(os.getcwd() + "/class/core") |
||||
import mw |
||||
|
||||
DEBUG = True |
||||
|
||||
""" |
||||
=============自定义异常=================== |
||||
""" |
||||
|
||||
|
||||
class OsError(Exception): |
||||
"""OS端异常""" |
||||
|
||||
|
||||
class ObjectNotFound(OsError): |
||||
"""对象不存在时抛出的异常""" |
||||
|
||||
def __init__(self, *args, **kwargs): |
||||
message = "文件对象不存在。" |
||||
super(ObjectNotFound, self).__init__(message, *args, **kwargs) |
||||
|
||||
|
||||
class APIError(Exception): |
||||
"""API参数错误异常""" |
||||
|
||||
def __init__(self, *args, **kwargs): |
||||
_api_error_msg = 'API资料校验失败,请核实!' |
||||
super(APIError, self).__init__(_api_error_msg, *args, **kwargs) |
||||
|
||||
|
||||
class FtpPSClient: |
||||
_title = "FTP" |
||||
_name = "ftp" |
||||
__host = None |
||||
__port = None |
||||
__user = None |
||||
__password = None |
||||
default_port = 21 |
||||
default_backup_path = "/backup/" |
||||
config_file = "cfg.json" |
||||
|
||||
def __init__(self, load_config=True, timeout=10): |
||||
self.timeout = timeout |
||||
if load_config: |
||||
data = self.get_config() |
||||
self.injection_config(data) |
||||
|
||||
def get_config(self): |
||||
default_config = { |
||||
"ftp_host": '', |
||||
"ftp_user": '', |
||||
"ftp_pass": '', |
||||
"backup_path": self.default_backup_path |
||||
} |
||||
|
||||
cfg = mw.getServerDir() + "/backup_ftp/" + self.config_file |
||||
if os.path.exists(cfg): |
||||
data = mw.readFile(cfg) |
||||
return json.loads(data) |
||||
else: |
||||
return default_config |
||||
|
||||
def injection_config(self, data): |
||||
host = data["ftp_host"].strip() |
||||
if host.find(':') == -1: |
||||
self.__port = self.default_port |
||||
|
||||
self.__host = data['ftp_host'].strip() |
||||
self.__user = data['ftp_user'].strip() |
||||
self.__password = data['ftp_pass'].strip() |
||||
bp = data['backup_path'].strip() |
||||
if bp: |
||||
self.backup_path = self.getPath(bp) |
||||
else: |
||||
self.backup_path = self.getPath(self.default_backup_path) |
||||
|
||||
def authorize(self): |
||||
try: |
||||
if self.timeout is not None: |
||||
ftp = ftplib.FTP(timeout=self.timeout) |
||||
else: |
||||
ftp = ftplib.FTP() |
||||
|
||||
debuglevel = 0 |
||||
# if DEBUG: |
||||
# debuglevel = 3 |
||||
ftp.set_debuglevel(debuglevel) |
||||
# ftp.set_pasv(True) |
||||
ftp.connect(self.__host, int(self.__port)) |
||||
ftp.login(self.__user, self.__password) |
||||
return ftp |
||||
except Exception as e: |
||||
raise OsError("无法连接FTP客户端,请检查配置参数是否正确。") |
||||
|
||||
# 取目录路径 |
||||
def getPath(self, path): |
||||
if path[-1:] != '/': |
||||
path += '/' |
||||
if path[:1] != '/': |
||||
path = '/' + path |
||||
return path.replace('//', '/') |
||||
|
||||
def generateDownloadUrl(self, object_name): |
||||
|
||||
return 'ftp://' + \ |
||||
self.__user + ':' + \ |
||||
self.__password + '@' + \ |
||||
self.__host + ':' + \ |
||||
"/" + object_name |
||||
|
||||
def createDir(self, path, name): |
||||
ftp = self.authorize() |
||||
path = self.getPath(path) |
||||
ftp.cwd(path) |
||||
try: |
||||
ftp.mkd(name) |
||||
ftp.close() |
||||
return True |
||||
except Exception as e: |
||||
ftp.close() |
||||
return False |
||||
|
||||
def deleteDir(self, path, dir_name): |
||||
try: |
||||
ftp = self.authorize() |
||||
ftp.rmd(dir_name) |
||||
return True |
||||
except ftplib.error_perm as e: |
||||
print(str(e) + ":" + dir_name) |
||||
except Exception as e: |
||||
print(e) |
||||
return False |
||||
|
||||
def deleteFile(self, filename): |
||||
try: |
||||
ftp = self.authorize() |
||||
ftp.delete(filename) |
||||
return True |
||||
except Exception as e: |
||||
return False |
||||
|
||||
def getList(self, path="/"): |
||||
ftp = self.authorize() |
||||
path = self.getPath(path) |
||||
ftp.cwd(path) |
||||
mlsd = False |
||||
try: |
||||
files = list(ftp.mlsd()) |
||||
files = files[1:] |
||||
mlsd = True |
||||
except: |
||||
try: |
||||
files = ftp.nlst(path) |
||||
mlsd = False |
||||
except: |
||||
raise RuntimeError("ftp服务器数据返回异常。") |
||||
|
||||
ftp.close() |
||||
f_list = [] |
||||
dirs = [] |
||||
data = [] |
||||
default_time = '1971/01/01 01:01:01' |
||||
for dt in files: |
||||
# print(dt) |
||||
if mlsd: |
||||
dt_name = dt[0] |
||||
dt_info = dt[1] |
||||
else: |
||||
if dt.find("/") >= 0: |
||||
dt = dt.split("/")[-1] |
||||
tmp = {} |
||||
tmp['name'] = dt_name |
||||
if dt_name == '.' or dt_name == '..': |
||||
continue |
||||
|
||||
tmp['time'] = dt_info['modify'] |
||||
try: |
||||
tmp['size'] = dt_info['size'] |
||||
tmp['type'] = "File" |
||||
tmp['download'] = self.generateDownloadUrl(path + dt_name) |
||||
f_list.append(tmp) |
||||
except: |
||||
tmp['size'] = dt_info['sizd'] |
||||
tmp['type'] = None |
||||
tmp['download'] = '' |
||||
dirs.append(tmp) |
||||
data = dirs + f_list |
||||
|
||||
mlist = {} |
||||
mlist['path'] = path |
||||
mlist['list'] = data |
||||
return mlist |
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,104 @@ |
||||
<style> |
||||
.upyunCon { |
||||
height: 428px; |
||||
} |
||||
|
||||
.up-place { |
||||
height: 62px; |
||||
border-bottom: 1px solid #ddd; |
||||
} |
||||
|
||||
.up-place .btn { |
||||
border-radius: 0; |
||||
} |
||||
|
||||
.up-place .place-input { |
||||
background-color: #f3f3f3; |
||||
border: 1px solid #ccc; |
||||
height: 30px; |
||||
line-height: 28px; |
||||
overflow: hidden; |
||||
margin: 1px 0 0 -1px; |
||||
width: 340px; |
||||
} |
||||
|
||||
.place-input ul { |
||||
display: inline-block; |
||||
position: relative; |
||||
width: auto; |
||||
} |
||||
|
||||
.place-input ul li { |
||||
background: url("/static/img/ico/ico-ltr.png") no-repeat right center; |
||||
float: left; |
||||
padding-left: 10px; |
||||
padding-right: 18px; |
||||
} |
||||
|
||||
.place-input ul li a { |
||||
height: 28px; |
||||
cursor: pointer; |
||||
display: inline-block; |
||||
} |
||||
|
||||
.upyunlist { |
||||
height: 516px; |
||||
overflow: auto; |
||||
} |
||||
|
||||
.up-bottom { |
||||
background-color: #fafafa; |
||||
border-top: 1px solid #eee; |
||||
bottom: 0; |
||||
position: absolute; |
||||
width: 100%; |
||||
} |
||||
|
||||
.up-use { |
||||
line-height: 50px |
||||
} |
||||
|
||||
.list-list .cursor span { |
||||
line-height: 30px; |
||||
} |
||||
|
||||
.btn-title { |
||||
margin-top: 1px |
||||
} |
||||
|
||||
.tip { |
||||
font-size: 10px; |
||||
font-style: oblique; |
||||
color: green; |
||||
} |
||||
</style> |
||||
<div class="upyunCon"> |
||||
<div class="up-place pd15"> |
||||
<button id="backBtn" class="btn btn-default btn-sm glyphicon glyphicon-arrow-left pull-left" title="后退"></button> |
||||
<input id="myPath" style="display:none;" type="text" value=""> |
||||
<div class="place-input pull-left"> |
||||
<div style="width:1400px;height:28px"><ul></ul></div> |
||||
</div> |
||||
<button class="refreshBtn btn btn-default btn-sm glyphicon glyphicon-refresh pull-left mr20" title="刷新" style="margin-left:-1px;"></button> |
||||
<button class="btn btn-default btn-sm pull-right btn-title" onclick="upyunApi()">帐户设置</button> |
||||
<button class="btn btn-default btn-sm pull-right mr20 btn-title" onclick="createDir()">新建文件夹</button> |
||||
</div> |
||||
|
||||
<div class="upyunlist pd15"> |
||||
<div class="divtable" style="margin-bottom:15px"> |
||||
<table class="table table-hover"> |
||||
<thead><tr><th>名称</th><th>大小</th><th>更新时间</th><th class="text-right">操作</th></tr></thead> |
||||
<tbody class="list-list"></tbody> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- <script type="text/javascript" src="/plugins/file?name=backup_ftp&f=js/backup_ftp.js"></script> --> |
||||
<script type="text/javascript"> |
||||
$.getScript( "/plugins/file?name=backup_ftp&f=js/backup_ftp.js", function(){ |
||||
// pluginService('backup_ftp'); |
||||
osList('/'); |
||||
}); |
||||
|
||||
</script> |
@ -0,0 +1,198 @@ |
||||
# coding:utf-8 |
||||
|
||||
import sys |
||||
import io |
||||
import os |
||||
import time |
||||
import re |
||||
import json |
||||
|
||||
sys.path.append(os.getcwd() + "/class/core") |
||||
import mw |
||||
|
||||
_ver = sys.version_info |
||||
is_py2 = (_ver[0] == 2) |
||||
is_py3 = (_ver[0] == 3) |
||||
|
||||
DEBUG = False |
||||
|
||||
if is_py2: |
||||
reload(sys) |
||||
sys.setdefaultencoding('utf-8') |
||||
|
||||
app_debug = False |
||||
if mw.isAppleSystem(): |
||||
app_debug = True |
||||
|
||||
|
||||
def getPluginName(): |
||||
return 'backup_ftp' |
||||
|
||||
|
||||
def getPluginDir(): |
||||
return mw.getPluginDir() + '/' + getPluginName() |
||||
|
||||
|
||||
sys.path.append(getPluginDir() + "/class") |
||||
from ftp_client import FtpPSClient |
||||
|
||||
|
||||
def getServerDir(): |
||||
return mw.getServerDir() + '/' + getPluginName() |
||||
|
||||
|
||||
def getArgs(): |
||||
args = sys.argv[2:] |
||||
tmp = {} |
||||
args_len = len(args) |
||||
|
||||
if args_len == 1: |
||||
t = args[0].strip('{').strip('}') |
||||
t = t.split(':') |
||||
tmp[t[0]] = t[1] |
||||
elif args_len > 1: |
||||
for i in range(len(args)): |
||||
t = args[i].split(':') |
||||
tmp[t[0]] = t[1] |
||||
|
||||
return tmp |
||||
|
||||
|
||||
def checkArgs(data, ck=[]): |
||||
for i in range(len(ck)): |
||||
if not ck[i] in data: |
||||
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!')) |
||||
return (True, mw.returnJson(True, 'ok')) |
||||
|
||||
|
||||
def status(): |
||||
return 'start' |
||||
|
||||
|
||||
def getConf(): |
||||
cfg = getServerDir() + "/cfg.json" |
||||
if not os.path.exists(cfg): |
||||
return mw.returnJson(False, "未配置", []) |
||||
data = mw.readFile(cfg) |
||||
data = json.loads(data) |
||||
return mw.returnJson(True, "OK", data) |
||||
|
||||
|
||||
def setConf(): |
||||
args = getArgs() |
||||
data = checkArgs(args, ['use_sftp', 'ftp_user', |
||||
'ftp_pass', 'ftp_host', 'backup_path']) |
||||
if not data[0]: |
||||
return data[1] |
||||
|
||||
cfg = getServerDir() + "/cfg.json" |
||||
|
||||
values = ['ftp_user', |
||||
'ftp_pass', |
||||
'ftp_host'] |
||||
for v in values: |
||||
if args[v] == '': |
||||
return mw.returnJson(False, '必填资料不能为空,请核实!', []) |
||||
|
||||
if args['backup_path'] == '': |
||||
args['backup_path'] = "/backup" |
||||
|
||||
try: |
||||
ftp = FtpPSClient(load_config=False) |
||||
ftp.injection_config(args) |
||||
data = ftp.getList() |
||||
if data: |
||||
mw.writeFile(cfg, mw.getJson(args)) |
||||
return mw.returnJson(True, '设置成功', []) |
||||
except Exception as e: |
||||
# print(str(e)) |
||||
pass |
||||
|
||||
return mw.returnJson(False, 'FTP校验失败,请核实!', []) |
||||
|
||||
|
||||
def getList(): |
||||
cfg = getServerDir() + "/cfg.json" |
||||
if not os.path.exists(cfg): |
||||
return mw.returnJson(False, "未配置FTP,请点击`账户设置`", []) |
||||
|
||||
args = getArgs() |
||||
data = checkArgs(args, ['path']) |
||||
if not data[0]: |
||||
return data[1] |
||||
|
||||
ftp = FtpPSClient() |
||||
flist = ftp.getList(args['path']) |
||||
return mw.returnJson(True, "ok", flist) |
||||
|
||||
|
||||
def createDir(): |
||||
args = getArgs() |
||||
data = checkArgs(args, ['path', 'name']) |
||||
if not data[0]: |
||||
return data[1] |
||||
|
||||
ftp = FtpPSClient() |
||||
isok = ftp.createDir(args['path'], args['name']) |
||||
if isok: |
||||
return mw.returnJson(True, "创建成功") |
||||
return mw.returnJson(False, "创建失败") |
||||
|
||||
|
||||
def deleteDir(): |
||||
args = getArgs() |
||||
data = checkArgs(args, ['dir_name', 'path']) |
||||
if not data[0]: |
||||
return data[1] |
||||
|
||||
ftp = FtpPSClient() |
||||
isok = ftp.deleteDir(args['path'], args['dir_name']) |
||||
if isok: |
||||
return mw.returnJson(True, "删除成功") |
||||
return mw.returnJson(False, "删除失败") |
||||
|
||||
|
||||
def deleteFile(): |
||||
args = getArgs() |
||||
data = checkArgs(args, ['path', 'filename']) |
||||
if not data[0]: |
||||
return data[1] |
||||
|
||||
ftp = FtpPSClient() |
||||
isok = ftp.deleteFile(args['filename']) |
||||
if isok: |
||||
return mw.returnJson(True, "删除成功") |
||||
return mw.returnJson(False, "删除失败") |
||||
|
||||
|
||||
def installPreInspection(): |
||||
return 'ok' |
||||
|
||||
if __name__ == "__main__": |
||||
func = sys.argv[1] |
||||
if func == 'status': |
||||
print(status()) |
||||
elif func == 'start': |
||||
print(start()) |
||||
elif func == 'stop': |
||||
print(stop()) |
||||
elif func == 'restart': |
||||
print(restart()) |
||||
elif func == 'reload': |
||||
print(reload()) |
||||
elif func == 'install_pre_inspection': |
||||
print(installPreInspection()) |
||||
elif func == 'conf': |
||||
print(getConf()) |
||||
elif func == 'set_config': |
||||
print(setConf()) |
||||
elif func == "get_list": |
||||
print(getList()) |
||||
elif func == "create_dir": |
||||
print(createDir()) |
||||
elif func == "delete_dir": |
||||
print(deleteDir()) |
||||
elif func == 'delete_file': |
||||
print(deleteFile()) |
||||
else: |
||||
print('error') |
@ -0,0 +1,17 @@ |
||||
{ |
||||
"title":"FTP存储空间", |
||||
"hook":["backup"], |
||||
"tip":"soft", |
||||
"name":"backup_ftp", |
||||
"type":"运行环境", |
||||
"ps":"将网站或数据库打包备份到FTP存储空间", |
||||
"versions":["1.0"], |
||||
"install_pre_inspection":false, |
||||
"shell":"install.sh", |
||||
"checks":"server/backup_ftp", |
||||
"path": "server/backup_ftp", |
||||
"author":"midoks", |
||||
"home":"", |
||||
"date":"2022-10-23", |
||||
"pid": "4" |
||||
} |
@ -0,0 +1,32 @@ |
||||
#!/bin/bash |
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin |
||||
export PATH |
||||
|
||||
curPath=`pwd` |
||||
rootPath=$(dirname "$curPath") |
||||
rootPath=$(dirname "$rootPath") |
||||
serverPath=$(dirname "$rootPath") |
||||
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl |
||||
sys_os=`uname` |
||||
|
||||
|
||||
Install_App() |
||||
{ |
||||
mkdir -p ${serverPath}/backup_ftp |
||||
echo "${1}" > ${serverPath}/backup_ftp/version.pl |
||||
echo '安装完成' > $install_tmp |
||||
|
||||
} |
||||
|
||||
Uninstall_App() |
||||
{ |
||||
rm -rf ${serverPath}/bk_demo |
||||
} |
||||
|
||||
action=$1 |
||||
if [ "${1}" == 'install' ];then |
||||
Install_App $2 |
||||
else |
||||
Uninstall_App $2 |
||||
fi |
@ -0,0 +1,250 @@ |
||||
|
||||
|
||||
function bkfPost(method,args,callback){ |
||||
var _args = null;
|
||||
if (typeof(args) == 'string'){ |
||||
_args = JSON.stringify(toArrayObject(args)); |
||||
} else { |
||||
_args = JSON.stringify(args); |
||||
} |
||||
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); |
||||
$.post('/plugins/run', {name:'backup_ftp', func:method, args:_args}, function(data) { |
||||
layer.close(loadT); |
||||
if (!data.status){ |
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); |
||||
return; |
||||
} |
||||
|
||||
if(typeof(callback) == 'function'){ |
||||
callback(data); |
||||
} |
||||
},'json');
|
||||
} |
||||
|
||||
// 自定义部分
|
||||
var i = null; |
||||
//设置API
|
||||
function upyunApi(){ |
||||
|
||||
bkfPost('conf', {}, function(rdata){ |
||||
var rdata = $.parseJSON(rdata.data); |
||||
var token = rdata.data; |
||||
var check_status = token.use_sftp; |
||||
var sftp_checked = check_status === "true" ? " checked=\"checked\"" : ""; |
||||
|
||||
if (typeof(token.ftp_host) == 'undefined'){ |
||||
token.ftp_host = ''; |
||||
} |
||||
|
||||
if (typeof(token.ftp_user) == 'undefined'){ |
||||
token.ftp_user = ''; |
||||
} |
||||
|
||||
if (typeof(token.ftp_pass) == 'undefined'){ |
||||
token.ftp_pass = ''; |
||||
} |
||||
|
||||
if (typeof(token.backup_path) == 'undefined'){ |
||||
token.backup_path = ''; |
||||
} |
||||
|
||||
var apicon = '<div class="bingfa mtb15" style="padding-bottom:0px;">\ |
||||
<p>\ |
||||
<span class="span_tit">使用SFTP:</span>\ <input style="width: 20px; vertical-align:middle;" type="checkbox" name="use_sftp"'+sftp_checked+'> 是否使用SFTP进行数据传输 \ |
||||
</p>\ |
||||
<p>\ |
||||
<span class="span_tit">Host:</span>\ |
||||
<input placeholder="请输入主机地址" style="width: 200px;" type="text" name="upyun_service" value="'+token.ftp_host+'"> *服务器地址,FTP默认端口21, SFTP默认端口22\ |
||||
</p>\ |
||||
<p>\ |
||||
<span class="span_tit">用户名:</span>\ |
||||
<input style="width: 200px;" type="text" name="ftp_username" value="'+token.ftp_user+'"> *指定用户名\ |
||||
</p>\ |
||||
<p>\ |
||||
<span class="span_tit">密码:</span>\ |
||||
<input style="width: 200px;" type="password" name="ftp_password" value="'+token.ftp_pass+'"> *登录密码\ |
||||
</p>\ |
||||
<p>\ |
||||
<span class="span_tit">存储位置:</span>\ |
||||
<input placeholder="请输入存储位置" style="width: 200px;" type="text" name="backup_path" value="'+token.backup_path+'"> *相对于根目录的路径,默认是/backup\ |
||||
</p>\ |
||||
</div>'; |
||||
layer.open({ |
||||
type: 1, |
||||
area: "600px", |
||||
title: "FTP/SFTP帐户设置", |
||||
closeBtn: 1, |
||||
shift: 5, |
||||
shadeClose: false, |
||||
btn: ['确定','取消'], |
||||
content:apicon, |
||||
yes:function(index,layero){ |
||||
var data = { |
||||
use_sftp:$("input[name='use_sftp']").prop('checked'), |
||||
ftp_user:$("input[name='ftp_username']").val(), |
||||
ftp_pass:$("input[name='ftp_password']").val(), |
||||
ftp_host:$("input[name='upyun_service']").val(), |
||||
backup_path:$("input[name='backup_path']").val() |
||||
} |
||||
bkfPost('set_config', data, function(rdata){ |
||||
var rdata = $.parseJSON(rdata.data); |
||||
if (rdata.status){ |
||||
showMsg(rdata.msg,function(){ |
||||
layer.close(index); |
||||
osList("/"); |
||||
},{icon:1},2000); |
||||
} else{ |
||||
layer.msg(rdata.msg,{icon:2}); |
||||
} |
||||
}) |
||||
}, |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
function createDir(){ |
||||
layer.open({ |
||||
type: 1, |
||||
area: "400px", |
||||
title: "创建目录", |
||||
closeBtn: 1, |
||||
shift: 5, |
||||
shadeClose: false, |
||||
btn: ['确定','取消'], |
||||
content:'<div class="bingfa bt-form c6" style="padding-bottom: 10px;">\ |
||||
<p>\ |
||||
<span class="span_tit">目录名称:</span>\ |
||||
<input style="width: 200px;" type="text" name="newPath" value="">\ |
||||
</p>\ |
||||
</div>', |
||||
success:function(){ |
||||
$("input[name='newPath']").focus().keyup(function(e){ |
||||
if(e.keyCode == 13) $(".layui-layer-btn0").click(); |
||||
}); |
||||
}, |
||||
yes:function(index,layero){ |
||||
var name = $("input[name='newPath']").val(); |
||||
if(name == ''){ |
||||
layer.msg('目录名称不能为空!',{icon:2}); |
||||
return; |
||||
} |
||||
var path = $("#myPath").val(); |
||||
var dirname = name; |
||||
// var loadT = layer.msg('正在创建目录['+dirname+']...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||
bkfPost('create_dir', {path:path,name:dirname}, function(data){ |
||||
var rdata = $.parseJSON(data.data); |
||||
if(rdata.status) { |
||||
showMsg(rdata.msg, function(){ |
||||
layer.close(index); |
||||
osList(path); |
||||
} ,{icon:1}, 2000); |
||||
} else{ |
||||
layer.msg(rdata.msg,{icon:2}); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
//删除文件
|
||||
function deleteFile(name, is_dir){ |
||||
if (is_dir === false){ |
||||
safeMessage('删除文件','删除后将无法恢复,真的要删除['+name+']吗?',function(){ |
||||
var path = $("#myPath").val(); |
||||
var filename = name; |
||||
bkfPost('delete_file', {filename:filename,path:path}, function(rdata){ |
||||
var rdata = $.parseJSON(rdata.data); |
||||
showMsg(rdata.msg,function(){ |
||||
osList(path); |
||||
},{icon:rdata.status?1:2},2000); |
||||
}); |
||||
}); |
||||
} else { |
||||
safeMessage('删除文件夹','删除后将无法恢复,真的要删除['+name+']吗?',function(){ |
||||
var path = $("#myPath").val(); |
||||
bkfPost('delete_dir', {dir_name:name,path:path}, function(rdata){ |
||||
var rdata = $.parseJSON(rdata.data); |
||||
showMsg(rdata.msg,function(){ |
||||
osList(path); |
||||
},{icon:rdata.status?1:2},2000); |
||||
}); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
function osList(path){ |
||||
bkfPost('get_list', {path:path}, function(rdata){ |
||||
|
||||
var rdata = $.parseJSON(rdata.data); |
||||
if(rdata.status === false){ |
||||
upyunApi(); |
||||
return; |
||||
} |
||||
|
||||
var mlist = rdata.data; |
||||
// console.log(mlist);
|
||||
var listBody = '' |
||||
var listFiles = '' |
||||
for(var i=0;i<mlist.list.length;i++){ |
||||
if(mlist.list[i].type == null){ |
||||
listBody += '<tr><td class="cursor" onclick="osList(\''+(path+'/'+mlist.list[i].name).replace('//','/')+'\')"><span class="ico ico-folder"></span>\<span>'+mlist.list[i].name+'</span></td>\ |
||||
<td>-</td>\ |
||||
<td>-</td>\ |
||||
<td class="text-right"><a class="btlink" onclick="deleteFile(\''+mlist.list[i].name+'\', true)">删除</a></td></tr>' |
||||
}else{ |
||||
listFiles += '<tr><td class="cursor"><span class="ico ico-file"></span>\<span>'+mlist.list[i].name+'</span></td>\ |
||||
<td>'+toSize(mlist.list[i].size)+'</td>\ |
||||
<td>'+getLocalTime(mlist.list[i].time)+'</td>\ |
||||
<td class="text-right"><a target="_blank" href="'+mlist.list[i].download+'" class="btlink">下载</a> | <a class="btlink" onclick="deleteFile(\''+mlist.list[i].name+'\', false)">删除</a></td></tr>' |
||||
} |
||||
} |
||||
listBody += listFiles; |
||||
|
||||
var pathLi=''; |
||||
var tmp = path.split('/') |
||||
var pathname = ''; |
||||
var n = 0; |
||||
for(var i=0;i<tmp.length;i++){ |
||||
if(n > 0 && tmp[i] == '') continue; |
||||
var dirname = tmp[i]; |
||||
if(dirname == '') { |
||||
dirname = '根目录'; |
||||
n++; |
||||
} |
||||
pathname += '/' + tmp[i]; |
||||
pathname = pathname.replace('//','/'); |
||||
pathLi += '<li><a title="'+pathname+'" onclick="osList(\''+pathname+'\')">'+dirname+'</a></li>'; |
||||
} |
||||
var um = 1; |
||||
if(tmp[tmp.length-1] == '') um = 2; |
||||
var backPath = tmp.slice(0,tmp.length-um).join('/') || '/'; |
||||
$('#myPath').val(path); |
||||
$(".upyunCon .place-input ul").html(pathLi); |
||||
$(".upyunlist .list-list").html(listBody); |
||||
|
||||
upPathLeft(); |
||||
|
||||
$('#backBtn').click(function() { |
||||
osList(backPath); |
||||
}); |
||||
|
||||
$('.upyunCon .refreshBtn').click(function(){ |
||||
osList(path); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
//计算当前目录偏移
|
||||
function upPathLeft(){ |
||||
var UlWidth = $(".place-input ul").width(); |
||||
var SpanPathWidth = $(".place-input").width() - 20; |
||||
var Ml = UlWidth - SpanPathWidth; |
||||
if(UlWidth > SpanPathWidth ){ |
||||
$(".place-input ul").css("left",-Ml) |
||||
} |
||||
else{ |
||||
$(".place-input ul").css("left",0) |
||||
} |
||||
} |
||||
// $('.layui-layer-page').css('height','670px');
|
Loading…
Reference in new issue