Commit 0aa0cd91 authored by wanli's avatar wanli

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

parent 03c95fdf
''' '''
Author: your name Author: your name
Date: 2021-06-30 18:03:41 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\signal_manager.py FilePath: \evm-store\tools\build_out\application\signal_manager.py
...@@ -57,7 +57,8 @@ class SignalManager(object): ...@@ -57,7 +57,8 @@ class SignalManager(object):
actionGetFileDisk = PySignal() actionGetFileDisk = PySignal()
actionGetFileDown = PySignal() actionGetFileDown = PySignal()
actionGetFilePreview = PySignal() actionGetFilePreview = PySignal()
actionPostFileUpdate = PySignal()
actionPostFileUpload = PySignal()
def __init__(self): def __init__(self):
super().__init__() super().__init__()
......
''' '''
Author: your name Author: your name
Date: 2021-06-30 17:43:46 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\__init__.py FilePath: \evm-store\tools\build_out\controllers\__init__.py
...@@ -70,3 +70,5 @@ def initConnect(): ...@@ -70,3 +70,5 @@ def initConnect():
signalManager.actionGetFileInit.connect(fileManager.initialize) signalManager.actionGetFileInit.connect(fileManager.initialize)
signalManager.actionGetFilePreview.connect(fileManager.preview) signalManager.actionGetFilePreview.connect(fileManager.preview)
signalManager.actionGetFileTree.connect(fileManager.tree) 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 ...@@ -9,8 +9,6 @@ from webcreator.response import ResponseCode
disk_root = config.UPLOAD_ROOT_DIR disk_root = config.UPLOAD_ROOT_DIR
logger.info(disk_root)
class FileManager(object): class FileManager(object):
def __init__(self) -> None: def __init__(self) -> None:
pass pass
...@@ -185,8 +183,24 @@ class FileManager(object): ...@@ -185,8 +183,24 @@ class FileManager(object):
logger.info(disk) logger.info(disk)
return True, ResponseCode.HTTP_SUCCESS 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): def upload(self, disk):
# select-disks # upload
logger.info(disk) logger.info(disk)
return True, ResponseCode.HTTP_SUCCESS return True, ResponseCode.HTTP_SUCCESS
...@@ -237,6 +251,9 @@ class FileManager(object): ...@@ -237,6 +251,9 @@ class FileManager(object):
mime = mimetypes.guess_type(target_file.resolve().as_posix())[0] mime = mimetypes.guess_type(target_file.resolve().as_posix())[0]
content = target_file.read_text(encoding="utf-8") content = target_file.read_text(encoding="utf-8")
if mime == "application/json":
content = json.dumps(content)
return (content, mime), ResponseCode.HTTP_SUCCESS return (content, mime), ResponseCode.HTTP_SUCCESS
def preview(self, disk, target_file): 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"}]} {"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 \ No newline at end of file
''' '''
Author: your name Author: your name
Date: 2021-07-15 03:22:19 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\__init__.py FilePath: \evm-store\tools\build_out\views\__init__.py
...@@ -53,8 +53,10 @@ api.add_resource(annex.AnnexResourceList, '/annex') ...@@ -53,8 +53,10 @@ api.add_resource(annex.AnnexResourceList, '/annex')
api.add_resource(file.FileInit, "/file-manager/initialize") api.add_resource(file.FileInit, "/file-manager/initialize")
api.add_resource(file.FileContent, "/file-manager/content") 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.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.FileDownload, "/file-manager/download")
api.add_resource(file.FilePrview, "/file-manager/preview") api.add_resource(file.FilePrview, "/file-manager/preview")
......
''' '''
Author: your name Author: your name
Date: 2021-07-09 12:39:40 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\file.py FilePath: \evm-store\tools\build_out\views\file.py
''' '''
import traceback import traceback
from pathlib import Path
from flask import current_app, jsonify, request, make_response, Response from flask import current_app, jsonify, request, make_response, Response
from flask_restful import Resource from flask_restful import Resource
from werkzeug.datastructures import FileStorage
from flask_restful.reqparse import RequestParser from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity ) from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from application.signal_manager import signalManager from application.signal_manager import signalManager
...@@ -30,7 +32,7 @@ class FileInit(Resource): ...@@ -30,7 +32,7 @@ class FileInit(Resource):
result, message = signalManager.actionGetFileInit.emit() result, message = signalManager.actionGetFileInit.emit()
if result: if result:
return { 'config': result, 'result': { 'message': None, 'status': "success" } } 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: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR) return response_result(ResponseCode.HTTP_SERVER_ERROR)
...@@ -54,7 +56,7 @@ class FileContent(Resource): ...@@ -54,7 +56,7 @@ class FileContent(Resource):
response = { 'result': { 'message': None, 'status': "success" } } response = { 'result': { 'message': None, 'status': "success" } }
response.update(result) response.update(result)
return response return response
return response_result(message) return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
current_app.logger.error(e) current_app.logger.error(e)
...@@ -78,7 +80,7 @@ class FileTree(Resource): ...@@ -78,7 +80,7 @@ class FileTree(Resource):
response = { 'result': { 'message': None, 'status': "success" }, 'directories': None } response = { 'result': { 'message': None, 'status': "success" }, 'directories': None }
response.update({ 'directories': result }) response.update({ 'directories': result })
return response return response
return response_result(message) return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
current_app.logger.error(e) current_app.logger.error(e)
...@@ -91,15 +93,58 @@ class FileDisk(Resource): ...@@ -91,15 +93,58 @@ class FileDisk(Resource):
def get(self): def get(self):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开 # 特殊参数,即不是从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("disk", type=str, location="args", required=True)
self.parser.add_argument("path", 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() args = self.parser.parse_args()
try: try:
result, message = signalManager.actionGetFileDisk.emit(args.disk, args.path) fileList = request.files.getlist('fileList')
result, message = signalManager.actionPostFileUpload.emit()
if result: if result:
return response_result(ResponseCode.HTTP_SUCCESS, data=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: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR) return response_result(ResponseCode.HTTP_SERVER_ERROR)
...@@ -116,13 +161,15 @@ class FileDownload(Resource): ...@@ -116,13 +161,15 @@ class FileDownload(Resource):
args = self.parser.parse_args() args = self.parser.parse_args()
try: try:
logger.info(args.path)
result, message = signalManager.actionGetFileDown.emit(args.disk, args.path) result, message = signalManager.actionGetFileDown.emit(args.disk, args.path)
if result: if result:
resp, mime = result resp, mime = result
# return Response(resp, mimetype='text/xml') # return Response(resp, mimetype='text/xml')
return Response(resp, content_type='{}; charset=utf-8'.format(mime)) 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: except Exception as e:
traceback.print_exc()
current_app.logger.error(e) current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR) return response_result(ResponseCode.HTTP_SERVER_ERROR)
...@@ -146,7 +193,7 @@ class FilePrview(Resource): ...@@ -146,7 +193,7 @@ class FilePrview(Resource):
resp = make_response(content) resp = make_response(content)
resp.mimetype = mime resp.mimetype = mime
return resp return resp
return response_result(message) return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
current_app.logger.error(e) current_app.logger.error(e)
......
...@@ -75,9 +75,9 @@ export default { ...@@ -75,9 +75,9 @@ export default {
settings: { settings: {
headers: { // axios headers headers: { // axios headers
"X-Requested-With": "XMLHttpRequest", "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 windowsConfig: 2, // overwrite config
lang: "zh_CN", // set language lang: "zh_CN", // set language
}, },
......
...@@ -60,11 +60,7 @@ export default { ...@@ -60,11 +60,7 @@ export default {
path: this.selectedItem.path, path: this.selectedItem.path,
}).then((response) => { }).then((response) => {
// add code // add code
if (this.selectedItem.extension === 'json') { this.code = response.data;
this.code = JSON.stringify(response.data, null, 4);
} else {
this.code = response.data;
}
// set size // set size
this.$refs.fmCodeEditor.codemirror.setSize(null, this.editorHeight); this.$refs.fmCodeEditor.codemirror.setSize(null, this.editorHeight);
......
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-07-15 09:33:39 * @Date: 2021-07-15 09:33:39
* @LastEditTime: 2021-07-15 18:29:06 * @LastEditTime: 2021-07-17 16:45:06
* @LastEditors: your name * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \evm-store\tools\frontend\vue.config.js * @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