diff --git a/web/utils/file.py b/web/utils/file.py index 99df5edcd..415ee8a97 100644 --- a/web/utils/file.py +++ b/web/utils/file.py @@ -16,6 +16,79 @@ import shutil import core.mw as mw import thisdb +def uploadSegmentApi(self): + # 分段上传 + path = request.form.get('path', '') + name = request.form.get('name', '') + size = request.form.get('size') + start = request.form.get('start') + dir_mode = request.form.get('dir_mode', '') + file_mode = request.form.get('file_mode', '') + + if not mw.fileNameCheck(name): + return mw.returnData(False, '文件名中不能包含特殊字符!') + + if path == '/': + return mw.returnData(False, '不能直接上传文件到系统根目录!') + + if name.find('./') != -1 or path.find('./') != -1: + return mw.returnData(False, '错误的参数') + + if not os.path.exists(path): + os.makedirs(path, 493) + if not dir_mode != '' or not file_mode != '': + mw.setMode(path) + + save_path = os.path.join( + path, name + '.' + str(int(size)) + '.upload.tmp') + d_size = 0 + if os.path.exists(save_path): + d_size = os.path.getsize(save_path) + + if d_size != int(start): + return str(d_size) + + f = open(save_path, 'ab') + b64_data = request.form.get('b64_data', '0') + if b64_data == '1': + import base64 + b64_data = base64.b64decode(args.b64_data) + f.write(b64_data) + else: + upload_files = request.files.getlist("blob") + for tmp_f in upload_files: + f.write(tmp_f.read()) + + f.close() + f_size = os.path.getsize(save_path) + if f_size != int(size): + return str(f_size) + + new_name = os.path.join(path, name) + if os.path.exists(new_name): + if new_name.find('.user.ini') != -1: + mw.execShell("chattr -i " + new_name) + try: + os.remove(new_name) + except: + mw.execShell("rm -f %s" % new_name) + + os.renames(save_path, new_name) + + if dir_mode != '' and dir_mode != '': + mode_tmp1 = dir_mode.split(',') + mw.setMode(path, mode_tmp1[0]) + mw.setOwn(path, mode_tmp1[1]) + mode_tmp2 = file_mode.split(',') + mw.setMode(new_name, mode_tmp2[0]) + mw.setOwn(new_name, mode_tmp2[1]) + else: + self.setMode(new_name) + + msg = mw.getInfo('上传文件[{1}] 到 [{2}]成功!', (new_name, path)) + mw.writeLog('文件管理', msg) + return mw.returnData(True, '上传成功!') + def uncompress(sfile, dfile, path): if not os.path.exists(sfile): return mw.returnData(False, '指定文件不存在!')