Commit 0aa0cd91 authored by wanli's avatar wanli

🐞 fix(文件管理模块): 修复文件编辑器显示JSON异常问题

parent 03c95fdf
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-15 17:10:43
LastEditTime: 2021-07-17 17:50:02
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\signal_manager.py
......@@ -57,7 +57,8 @@ class SignalManager(object):
actionGetFileDisk = PySignal()
actionGetFileDown = PySignal()
actionGetFilePreview = PySignal()
actionPostFileUpdate = PySignal()
actionPostFileUpload = PySignal()
def __init__(self):
super().__init__()
......
'''
Author: your name
Date: 2021-06-30 17:43:46
LastEditTime: 2021-07-15 17:10:33
LastEditTime: 2021-07-17 17:54:09
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\__init__.py
......@@ -70,3 +70,5 @@ def initConnect():
signalManager.actionGetFileInit.connect(fileManager.initialize)
signalManager.actionGetFilePreview.connect(fileManager.preview)
signalManager.actionGetFileTree.connect(fileManager.tree)
signalManager.actionPostFileUpdate.connect(fileManager.update_file)
signalManager.actionPostFileUpload.connect(fileManager.upload)
......@@ -9,8 +9,6 @@ from webcreator.response import ResponseCode
disk_root = config.UPLOAD_ROOT_DIR
logger.info(disk_root)
class FileManager(object):
def __init__(self) -> None:
pass
......@@ -185,8 +183,24 @@ class FileManager(object):
logger.info(disk)
return True, ResponseCode.HTTP_SUCCESS
def update_file(self, disk, path, file):
# update file
# 判断文件是否存在
target_dir = Path(disk_root).joinpath(disk).joinpath(path)
if not target_dir.is_dir():
return False, ResponseCode.HTTP_INVAILD_REQUEST
if not target_dir.exists():
target_dir.mkdir()
target_file = target_dir.joinpath(file.filename)
if target_file.exists():
if not target_file.is_file():
return False, ResponseCode.HTTP_INVAILD_REQUEST
target_file.unlink()
file.save(target_file.resolve().as_posix())
return True, ResponseCode.HTTP_SUCCESS
def upload(self, disk):
# select-disks
# upload
logger.info(disk)
return True, ResponseCode.HTTP_SUCCESS
......@@ -237,6 +251,9 @@ class FileManager(object):
mime = mimetypes.guess_type(target_file.resolve().as_posix())[0]
content = target_file.read_text(encoding="utf-8")
if mime == "application/json":
content = json.dumps(content)
return (content, mime), ResponseCode.HTTP_SUCCESS
def preview(self, disk, target_file):
......
{"directories": [{"basename": "evueapps", "dirname": ".", "path": "evueapps", "timestamp": 1618901644, "type": "dir"}], "files": [{"basename": "appjs.c", "dirname": ".", "extension": "c", "filename": "appjs", "path": "appjs.c", "size": 2145, "timestamp": 1625480571, "type": "file"}, {"basename": "result.json", "dirname": ".", "extension": "json", "filename": "result", "path": "result.json", "size": 394, "timestamp": 1624420270, "type": "file"}]}
\ No newline at end of file
{"directories": [{"basename": "evueapps", "dirname": ".", "path": "evueapps", "timestamp": 1618901644, "type": "dir"}], "files": [{"basename": "appjs.c", "dirname": ".", "extension": "c", "filename": "appjs", "path": "appjs.c", "size": 2145, "timestamp": 1625480571, "type": "file"}, {"basename": "codefresh-build-3.yaml", "dirname": ".", "extension": "yaml", "filename": "codefresh-build-3", "path": "codefresh-build-3.yaml", "size": 268, "timestamp": 1626516235, "type": "file"}, {"basename": "result - \u526f\u672c.json", "dirname": ".", "extension": "json", "filename": "result - \u526f\u672c", "path": "result - \u526f\u672c.json", "size": 302, "timestamp": 1626518687, "type": "file"}, {"basename": "result.json", "dirname": ".", "extension": "json", "filename": "result", "path": "result.json", "size": 407, "timestamp": 1626520437, "type": "file"}]}
\ No newline at end of file
'''
Author: your name
Date: 2021-07-15 03:22:19
LastEditTime: 2021-07-15 17:45:32
LastEditTime: 2021-07-17 17:54:50
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\__init__.py
......@@ -53,8 +53,10 @@ api.add_resource(annex.AnnexResourceList, '/annex')
api.add_resource(file.FileInit, "/file-manager/initialize")
api.add_resource(file.FileContent, "/file-manager/content")
api.add_resource(file.FileDisk, "/file-manager/disk")
api.add_resource(file.FileDisk, "/file-manager/select-disk")
api.add_resource(file.FileTree, "/file-manager/tree")
api.add_resource(file.FileUpdate, "/file-manager/update-file")
api.add_resource(file.FileUpload, "/file-manager/upload")
api.add_resource(file.FileDownload, "/file-manager/download")
api.add_resource(file.FilePrview, "/file-manager/preview")
......
'''
Author: your name
Date: 2021-07-09 12:39:40
LastEditTime: 2021-07-17 16:25:44
LastEditTime: 2021-07-17 19:56:04
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\file.py
'''
import traceback
from pathlib import Path
from flask import current_app, jsonify, request, make_response, Response
from flask_restful import Resource
from werkzeug.datastructures import FileStorage
from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from application.signal_manager import signalManager
......@@ -30,7 +32,7 @@ class FileInit(Resource):
result, message = signalManager.actionGetFileInit.emit()
if result:
return { 'config': result, 'result': { 'message': None, 'status': "success" } }
return response_result(message)
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
......@@ -54,7 +56,7 @@ class FileContent(Resource):
response = { 'result': { 'message': None, 'status': "success" } }
response.update(result)
return response
return response_result(message)
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
traceback.print_exc()
current_app.logger.error(e)
......@@ -78,7 +80,7 @@ class FileTree(Resource):
response = { 'result': { 'message': None, 'status': "success" }, 'directories': None }
response.update({ 'directories': result })
return response
return response_result(message)
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
traceback.print_exc()
current_app.logger.error(e)
......@@ -91,15 +93,58 @@ class FileDisk(Resource):
def get(self):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
self.parser.add_argument("disk", type=str, location="args", required=True)
self.parser.add_argument("path", type=str, location="args", required=False)
args = self.parser.parse_args()
try:
result, message = signalManager.actionGetFileDisk.emit(args.disk)
if result:
return { 'information': list(message), 'result': { 'message': "Disk selected!", 'status': "success" } }
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
class FileUpdate(Resource):
def __init__(self):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
self.parser = RequestParser()
def post(self):
self.parser.add_argument("disk", type=str, location="args", required=True)
self.parser.add_argument("path", type=str, location="args", required=True)
self.parser.add_argument("file", type=FileStorage, location="files", required=True)
args = self.parser.parse_args()
try:
file = request.files.get("file") # args.get('file')
result, message = signalManager.actionPostFileUpdate.emit(args.disk, args.path, file)
if result:
return { 'config': result, 'result': { 'message': None, 'status': "success" } }
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
class FileUpload(Resource):
def __init__(self):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
self.parser = RequestParser()
def get(self):
self.parser.add_argument("disk", type=str, location="args", required=True)
self.parser.add_argument("path", type=str, location="args", required=True)
self.parser.add_argument("overwrite", type=int, location="args", default=0, required=True)
self.parser.add_argument("files", type=FileStorage, location="files", required=True)
args = self.parser.parse_args()
try:
result, message = signalManager.actionGetFileDisk.emit(args.disk, args.path)
fileList = request.files.getlist('fileList')
result, message = signalManager.actionPostFileUpload.emit()
if result:
return response_result(ResponseCode.HTTP_SUCCESS, data=result)
return response_result(message)
return { 'config': result, 'result': { 'message': None, 'status': "success" } }
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
......@@ -116,13 +161,15 @@ class FileDownload(Resource):
args = self.parser.parse_args()
try:
logger.info(args.path)
result, message = signalManager.actionGetFileDown.emit(args.disk, args.path)
if result:
resp, mime = result
# return Response(resp, mimetype='text/xml')
return Response(resp, content_type='{}; charset=utf-8'.format(mime))
return response_result(message)
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
traceback.print_exc()
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
......@@ -146,7 +193,7 @@ class FilePrview(Resource):
resp = make_response(content)
resp.mimetype = mime
return resp
return response_result(message)
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e:
traceback.print_exc()
current_app.logger.error(e)
......
......@@ -75,9 +75,9 @@ export default {
settings: {
headers: { // axios headers
"X-Requested-With": "XMLHttpRequest",
// Authorization: `Bearer ${window.localStorage.getItem("user-token")}`,
Authorization: `Bearer ${window.sessionStorage.getItem("Authorization")}`,
},
baseUrl: "/file-manager/", // overwrite base url Axios
baseUrl: "/api/v1/file-manager/", // overwrite base url Axios
windowsConfig: 2, // overwrite config
lang: "zh_CN", // set language
},
......
......@@ -60,11 +60,7 @@ export default {
path: this.selectedItem.path,
}).then((response) => {
// add code
if (this.selectedItem.extension === 'json') {
this.code = JSON.stringify(response.data, null, 4);
} else {
this.code = response.data;
}
// set size
this.$refs.fmCodeEditor.codemirror.setSize(null, this.editorHeight);
......
/*
* @Author: your name
* @Date: 2021-07-15 09:33:39
* @LastEditTime: 2021-07-15 18:29:06
* @LastEditors: your name
* @LastEditTime: 2021-07-17 16:45:06
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\tools\frontend\vue.config.js
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment