mirror of https://github.com/midoks/mdserver-web
parent
e9079a851f
commit
ffa141ad6b
@ -0,0 +1,168 @@ |
|||||||
|
# coding: utf-8 |
||||||
|
|
||||||
|
import psutil |
||||||
|
import time |
||||||
|
import os |
||||||
|
import sys |
||||||
|
import public |
||||||
|
import re |
||||||
|
import json |
||||||
|
import pwd |
||||||
|
|
||||||
|
|
||||||
|
class file_api: |
||||||
|
|
||||||
|
def __init__(self): |
||||||
|
pass |
||||||
|
|
||||||
|
def getBody(self, path): |
||||||
|
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)) |
||||||
|
|
||||||
|
def saveBody(self, path, data, encoding='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)) |
||||||
|
|
||||||
|
# 计算文件数量 |
||||||
|
def getFilesCount(self, path, search): |
||||||
|
i = 0 |
||||||
|
for name in os.listdir(path): |
||||||
|
if search: |
||||||
|
if name.lower().find(search) == -1: |
||||||
|
continue |
||||||
|
# if name[0:1] == '.': |
||||||
|
# continue |
||||||
|
i += 1 |
||||||
|
return i |
||||||
|
|
||||||
|
def getDir(self, path, page=1, page_size=10, search=None): |
||||||
|
data = {} |
||||||
|
dirnames = [] |
||||||
|
filenames = [] |
||||||
|
|
||||||
|
info = {} |
||||||
|
info['count'] = self.getFilesCount(path, search) |
||||||
|
info['row'] = page_size |
||||||
|
info['p'] = page |
||||||
|
info['tojs'] = 'getFiles' |
||||||
|
pageObj = public.getPageObject(info, '1,2,3,4,5,6,7,8') |
||||||
|
data['PAGE'] = pageObj[0] |
||||||
|
|
||||||
|
i = 0 |
||||||
|
n = 0 |
||||||
|
for filename in os.listdir(path): |
||||||
|
if search: |
||||||
|
if filename.lower().find(search) == -1: |
||||||
|
continue |
||||||
|
i += 1 |
||||||
|
if n >= pageObj[1].ROW: |
||||||
|
break |
||||||
|
if i < pageObj[1].SHIFT: |
||||||
|
continue |
||||||
|
|
||||||
|
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 |
||||||
|
|
||||||
|
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 |
||||||
|
|
||||||
|
data['DIR'] = sorted(dirnames) |
||||||
|
data['FILES'] = sorted(filenames) |
||||||
|
if path[0:2] == '//': |
||||||
|
data['PATH'] = path[1:] |
||||||
|
else: |
||||||
|
data['PATH'] = path |
||||||
|
return public.getJson(data) |
Loading…
Reference in new issue