Simple Linux Panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mdserver-web/route/files.py

181 lines
5.9 KiB

7 years ago
# coding:utf-8
7 years ago
import os
import sys
7 years ago
sys.path.append("class/core")
7 years ago
import public
7 years ago
from flask import Flask
from flask import Blueprint, render_template
from flask import jsonify
from flask import request
7 years ago
files = Blueprint('files', __name__, template_folder='templates')
7 years ago
7 years ago
@files.route("/")
def index():
return render_template('default/files.html')
7 years ago
@files.route('get_body', methods=['POST'])
def getBody():
path = request.form.get('path', '').encode('utf-8')
if not os.path.exists(path):
return public.returnJson(False, '文件不存在', (path,))
if os.path.getsize(path) > 2097152:
return public.returnJson(False, u'不能在线编辑大于2MB的文件!')
fp = open(path, 'rb')
data = {}
data['status'] = True
try:
if fp:
from chardet.universaldetector import UniversalDetector
detector = UniversalDetector()
srcBody = b""
for line in fp.readlines():
detector.feed(line)
srcBody += line
detector.close()
char = detector.result
data['encoding'] = char['encoding']
if char['encoding'] == 'GB2312' or not char['encoding'] or char[
'encoding'] == 'TIS-620' or char['encoding'] == 'ISO-8859-9':
data['encoding'] = 'GBK'
if char['encoding'] == 'ascii' or char[
'encoding'] == 'ISO-8859-1':
data['encoding'] = 'utf-8'
if char['encoding'] == 'Big5':
data['encoding'] = 'BIG5'
if not char['encoding'] in ['GBK', 'utf-8',
'BIG5']:
data['encoding'] = 'utf-8'
try:
if sys.version_info[0] == 2:
data['data'] = srcBody.decode(
data['encoding']).encode('utf-8', errors='ignore')
else:
data['data'] = srcBody.decode(data['encoding'])
except:
data['encoding'] = char['encoding']
if sys.version_info[0] == 2:
data['data'] = srcBody.decode(
data['encoding']).encode('utf-8', errors='ignore')
else:
data['data'] = srcBody.decode(data['encoding'])
else:
if sys.version_info[0] == 2:
data['data'] = srcBody.decode('utf-8').encode('utf-8')
else:
data['data'] = srcBody.decode('utf-8')
data['encoding'] = u'utf-8'
return public.returnJson(True, 'OK', data)
except Exception as ex:
return public.returnJson(False, u'文件编码不被兼容,无法正确读取文件!' + str(ex))
@files.route('save_body', methods=['POST'])
def saveBody():
path = request.form.get('path', '').encode('utf-8')
data = request.form.get('data', '').encode('utf-8')
encoding = request.form.get('encoding', '').encode('utf-8')
if not os.path.exists(path):
return public.returnJson(False, '文件不存在')
try:
if encoding == 'ascii':
encoding = 'utf-8'
if sys.version_info[0] == 2:
data = data.encode(encoding, errors='ignore')
fp = open(path, 'w+')
else:
data = data.encode(
encoding, errors='ignore').decode(encoding)
fp = open(path, 'w+', encoding=encoding)
fp.write(data)
fp.close()
public.writeLog('TYPE_FILE', '文件保存成功', (path,))
return public.returnJson(True, '文件保存成功')
except Exception as ex:
return public.returnJson(False, 'FILE_SAVE_ERR:' + str(ex))
7 years ago
@files.route('/get_dir', methods=['POST'])
def getDir():
path = request.form.get('path', '').encode('utf-8')
7 years ago
if not os.path.exists(path):
path = '/'
import pwd
dirnames = []
filenames = []
7 years ago
info = {}
info['count'] = 10
info['row'] = 10
info['p'] = 1
if request.form.has_key('p'):
info['p'] = int(request.form.get('p'))
info['uri'] = {}
info['return_js'] = ''
if request.form.has_key('tojs'):
info['return_js'] = request.form.get('tojs')
if request.form.has_key('showRow'):
info['row'] = int(request.form.get('showRow'))
data = {}
data['PAGE'] = public.getPage(info, '1,2,3,4,5,6,7,8')
search = None
if request.form.has_key('search'):
search = request.form.get('search').strip().lower()
i = 0
n = 0
for filename in os.listdir(path):
if search:
if filename.lower().find(search) == -1:
continue
i += 1
if n >= 10:
break
if i < 0:
continue
7 years ago
7 years ago
try:
filePath = (path + '/' + filename).encode('utf8')
link = ''
if os.path.islink(filePath):
filePath = os.readlink(filePath)
link = ' -> ' + filePath
if not os.path.exists(filePath):
filePath = path + '/' + filePath
if not os.path.exists(filePath):
continue
7 years ago
7 years ago
stat = os.stat(filePath)
accept = str(oct(stat.st_mode)[-3:])
mtime = str(int(stat.st_mtime))
user = ''
try:
user = pwd.getpwuid(stat.st_uid).pw_name
except:
user = str(stat.st_uid)
size = str(stat.st_size)
if os.path.isdir(filePath):
dirnames.append(filename + ';' + size + ';' +
mtime + ';' + accept + ';' + user + ';' + link)
else:
filenames.append(filename + ';' + size + ';' +
mtime + ';' + accept + ';' + user + ';' + link)
n += 1
except:
continue
7 years ago
data['DIR'] = sorted(dirnames)
data['FILES'] = sorted(filenames)
7 years ago
data['PATH'] = path
7 years ago
return public.getJson(data)