Commit 501aa1fb authored by wanli's avatar wanli

🐞 fix(文件管理模块后端):

修复文件管理模块后端获取tree数据接口bug
parent 9e6639ab
...@@ -4,6 +4,7 @@ import shutil ...@@ -4,6 +4,7 @@ import shutil
from pathlib import Path from pathlib import Path
import json import json
import mimetypes import mimetypes
from models.user import UserModel
from webcreator.log import logger from webcreator.log import logger
from application.config import config from application.config import config
from webcreator.response import ResponseCode from webcreator.response import ResponseCode
...@@ -19,7 +20,7 @@ class FileManager(object): ...@@ -19,7 +20,7 @@ class FileManager(object):
@param {*} self @param {*} self
@return {*} @return {*}
''' '''
def initialize(self): def initialize(self, jwt):
''' '''
disks: { disks: {
files: {driver: "local"}, files: {driver: "local"},
...@@ -40,12 +41,18 @@ class FileManager(object): ...@@ -40,12 +41,18 @@ class FileManager(object):
} }
# 这里需要过滤,有些目录只能管理员才能查看 # 这里需要过滤,有些目录只能管理员才能查看
p = Path(disk_root) user = UserModel.query.filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
for child in p.iterdir(): if user.role == 1:
if child.is_dir(): p = Path(disk_root)
result["disks"].update({ for child in p.iterdir():
child.name: { "driver": "local" } if child.is_dir():
}) result["disks"].update({
child.name: { "driver": "local" }
})
else:
result["disks"].update({
"uploads": { "driver": "local" }
})
return result, ResponseCode.HTTP_SUCCESS return result, ResponseCode.HTTP_SUCCESS
...@@ -84,22 +91,26 @@ class FileManager(object): ...@@ -84,22 +91,26 @@ class FileManager(object):
type: "file" type: "file"
} }
''' '''
if target_path == None:
target_path = ''
target_path = Path(target_path)
result = { result = {
"directories": [], "directories": [],
"files": [] "files": []
} }
disk_path = Path(disk_root).joinpath(disk) if target_path == None:
target_path = ''
disk_path = Path(disk_root).joinpath(disk)
else:
disk_path = Path(disk_root)
if not disk_path.exists(): if not disk_path.exists():
return result logger.info(disk_path)
return result, ResponseCode.DIRECTORY_NOT_EXISTS
target_path = Path(target_path)
target_path = disk_path.joinpath(target_path) target_path = disk_path.joinpath(target_path)
if not target_path.exists(): if not target_path.exists():
return result logger.info(target_path)
return result, ResponseCode.DIRECTORY_NOT_EXISTS
for child in target_path.iterdir(): for child in target_path.iterdir():
if child.is_dir(): if child.is_dir():
...@@ -157,14 +168,16 @@ class FileManager(object): ...@@ -157,14 +168,16 @@ class FileManager(object):
rp = Path(disk_root) rp = Path(disk_root)
disk_path = rp / disk disk_path = rp / disk
if not disk_path.exists(): if not disk_path.exists():
return result return result, ResponseCode.DIRECTORY_NOT_EXISTS
temp_path = disk_path.joinpath(target_path) temp_path = disk_path.joinpath(target_path)
if not temp_path.exists(): if not temp_path.exists():
return result temp_path = Path(disk_root).joinpath(target_path)
if not temp_path.exists():
return result, ResponseCode.DIRECTORY_NOT_EXISTS
p = Path(disk_path) # p = Path(disk_path)
for child in p.iterdir(): for child in temp_path.iterdir():
if child.is_dir(): if child.is_dir():
result.append({ result.append({
"basename": child.name, "basename": child.name,
...@@ -177,6 +190,7 @@ class FileManager(object): ...@@ -177,6 +190,7 @@ class FileManager(object):
"type": "dir" "type": "dir"
}) })
# pprint.pprint(result) # pprint.pprint(result)
# logger.info(result)
return result, ResponseCode.HTTP_SUCCESS return result, ResponseCode.HTTP_SUCCESS
def disk(self, disk): def disk(self, disk):
...@@ -202,7 +216,6 @@ class FileManager(object): ...@@ -202,7 +216,6 @@ class FileManager(object):
def upload(self, disk, path, overwrite, fileList): def upload(self, disk, path, overwrite, fileList):
# upload # upload
print(disk)
target_dir = Path(disk_root).joinpath(disk).joinpath(path) target_dir = Path(disk_root).joinpath(disk).joinpath(path)
if not target_dir.exists(): if not target_dir.exists():
target_dir.mkdir() target_dir.mkdir()
...@@ -210,9 +223,10 @@ class FileManager(object): ...@@ -210,9 +223,10 @@ class FileManager(object):
for file in fileList: for file in fileList:
target_file = target_dir.joinpath(file.filename) target_file = target_dir.joinpath(file.filename)
if target_file.exists() and overwrite == 0: if target_file.exists() and overwrite == 0:
target_file.unlink()
elif target_file.exists():
continue continue
target_file.unlink()
file.save(target_file.resolve().as_posix()) file.save(target_file.resolve().as_posix())
return True, ResponseCode.HTTP_SUCCESS return True, ResponseCode.HTTP_SUCCESS
......
{"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": 376, "timestamp": 1626524753, "type": "file"}, {"basename": "result.json", "dirname": ".", "extension": "json", "filename": "result", "path": "result.json", "size": 407, "timestamp": 1626520437, "type": "file"}]} {"directories": [{"basename": "evm", "dirname": "uploads/evueapps", "path": "uploads/evueapps/evm", "timestamp": 1625930440, "type": "dir"}], "files": []}
\ No newline at end of file \ No newline at end of file
''' '''
Author: your name Author: your name
Date: 2021-07-09 12:39:40 Date: 2021-07-09 12:39:40
LastEditTime: 2021-07-17 22:17:51 LastEditTime: 2021-07-19 09:32:48
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
...@@ -24,6 +24,7 @@ class FileInit(Resource): ...@@ -24,6 +24,7 @@ class FileInit(Resource):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开 # 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
self.parser = RequestParser() self.parser = RequestParser()
@jwt_required(locations=["headers"])
def get(self): def get(self):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开 # 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
# self.parser.add_argument("page", type=int, location="args", default=1) # self.parser.add_argument("page", type=int, location="args", default=1)
...@@ -31,7 +32,8 @@ class FileInit(Resource): ...@@ -31,7 +32,8 @@ class FileInit(Resource):
# args = self.parser.parse_args() # args = self.parser.parse_args()
try: try:
result, message = signalManager.actionGetFileInit.emit() jwt = get_jwt_identity()
result, message = signalManager.actionGetFileInit.emit(jwt)
if result: if result:
return { 'config': result, 'result': { 'message': None, 'status': "success" } } return { 'config': result, 'result': { 'message': None, 'status': "success" } }
return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } } return { 'information': list(message), 'result': { 'message': "no data", 'status': "fail" } }
...@@ -79,6 +81,7 @@ class FileTree(Resource): ...@@ -79,6 +81,7 @@ class FileTree(Resource):
try: try:
result, message = signalManager.actionGetFileTree.emit(args.disk, args.path) result, message = signalManager.actionGetFileTree.emit(args.disk, args.path)
if result: if result:
logger.info(result)
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
...@@ -136,15 +139,15 @@ class FileUpload(Resource): ...@@ -136,15 +139,15 @@ class FileUpload(Resource):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开 # 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
self.parser = RequestParser() self.parser = RequestParser()
def get(self): def post(self):
self.parser.add_argument("disk", type=str, location="args", required=True) self.parser.add_argument("disk", type=str, location="form", required=True)
self.parser.add_argument("path", type=str, location="args", required=True) self.parser.add_argument("path", type=str, location="form", required=True)
self.parser.add_argument("overwrite", type=int, location="args", default=0, required=True) self.parser.add_argument("overwrite", type=int, location="form", default=0, required=True)
self.parser.add_argument("files", type=FileStorage, location="files", required=True) self.parser.add_argument("files", type=FileStorage, location="files", required=True, action='append')
args = self.parser.parse_args() args = self.parser.parse_args()
try: try:
fileList = request.files.getlist('fileList') fileList = request.files.getlist('files')
result, message = signalManager.actionPostFileUpload.emit(args.disk, args.path, args.overwrite, fileList) result, message = signalManager.actionPostFileUpload.emit(args.disk, args.path, args.overwrite, fileList)
if result: if result:
return { 'config': result, 'result': { 'message': None, 'status': "success" } } return { 'config': result, 'result': { 'message': None, 'status': "success" } }
......
''' '''
Author: your name Author: your name
Date: 2021-07-15 09:33:39 Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-17 20:46:51 LastEditTime: 2021-07-17 22:41:29
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\webcreator\response.py FilePath: \evm-store\tools\build_out\webcreator\response.py
...@@ -94,8 +94,8 @@ class ResponseCode(object): ...@@ -94,8 +94,8 @@ class ResponseCode(object):
# 文件管理模块 # 文件管理模块
FILE_NOT_EXISTS = (3010001, 'file not exists') FILE_NOT_EXISTS = (3010001, 'file not exists')
FILE_EXISTS = (3010002, 'file already exists') FILE_EXISTS = (3010002, 'file already exists')
DIRECTORY_NOT_EXISTS = (3010003, 'file not exists') DIRECTORY_NOT_EXISTS = (3010003, 'directory not exists')
DIRECTORY_EXISTS = (3010004, 'file already exists') DIRECTORY_EXISTS = (3010004, 'directory already exists')
def response_result(response, msg=None, data=None, **kwargs): def response_result(response, msg=None, data=None, **kwargs):
......
...@@ -243,7 +243,7 @@ export default { ...@@ -243,7 +243,7 @@ export default {
data.append('overwrite', overwrite); data.append('overwrite', overwrite);
// add file or files // add file or files
for (let i = 0; i < files.length; i += 1) { for (let i = 0; i < files.length; i += 1) {
data.append('files[]', files[i]); data.append('files', files[i]);
} }
// axios config - progress bar // axios config - progress bar
......
...@@ -73,9 +73,12 @@ export default { ...@@ -73,9 +73,12 @@ export default {
response: null, response: null,
}, },
settings: { settings: {
headers: { // axios headers headers: {
// axios headers
"X-Requested-With": "XMLHttpRequest", "X-Requested-With": "XMLHttpRequest",
Authorization: `Bearer ${window.sessionStorage.getItem("Authorization")}`, Authorization: `Bearer ${window.sessionStorage.getItem(
"Authorization"
)}`,
}, },
baseUrl: "/api/v1/file-manager/", // overwrite base url Axios baseUrl: "/api/v1/file-manager/", // overwrite base url Axios
windowsConfig: 2, // overwrite config windowsConfig: 2, // overwrite config
...@@ -84,7 +87,15 @@ export default { ...@@ -84,7 +87,15 @@ export default {
}; };
}, },
created() { created() {
console.log(this.$route.params) // disk and path
console.log(this.$route.params);
const params = this.$route.params;
if (params.disk && params.path) {
this.$store.dispatch("fm/selectDisk", {
disk: params.disk,
manager: "left",
});
}
// manual settings // manual settings
this.$store.commit("fm/settings/manualSettings", this.settings); this.$store.commit("fm/settings/manualSettings", this.settings);
......
<!--
* @Author: your name
* @Date: 2021-07-15 09:33:39
* @LastEditTime: 2021-07-19 09:21:43
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\tools\frontend\src\views\FileManager\components\manager\DiskList.vue
-->
<template> <template>
<div class="fm-disk-list"> <div class="fm-disk-list">
<ul class="list-inline"> <ul class="list-inline">
<li class="list-inline-item" v-for="(disk, index) in disks" v-bind:key="index"> <li
<span class="badge" class="list-inline-item"
v-on:click="selectDisk(disk)" v-for="(disk, index) in disks"
v-bind:class="[disk === selectedDisk ? 'badge-secondary' : 'badge-light']"> v-bind:key="index"
<i class="fa-fw far fa-hdd"/> {{ disk }} >
</span> <span
</li> class="badge"
</ul> v-on:click="selectDisk(disk)"
</div> v-bind:class="[
disk === selectedDisk ? 'badge-secondary' : 'badge-light',
]"
>
<i class="fa-fw far fa-hdd" /> {{ disk }}
</span>
</li>
</ul>
</div>
</template> </template>
<script> <script>
export default { export default {
name: 'DiskList', name: "DiskList",
props: { props: {
// manager name - left or right // manager name - left or right
manager: { type: String, required: true }, manager: { type: String, required: true },
...@@ -25,7 +41,7 @@ export default { ...@@ -25,7 +41,7 @@ export default {
* @returns {Array} * @returns {Array}
*/ */
disks() { disks() {
return this.$store.getters['fm/diskList']; return this.$store.getters["fm/diskList"];
}, },
/** /**
...@@ -43,7 +59,7 @@ export default { ...@@ -43,7 +59,7 @@ export default {
*/ */
selectDisk(disk) { selectDisk(disk) {
if (this.selectedDisk !== disk) { if (this.selectedDisk !== disk) {
this.$store.dispatch('fm/selectDisk', { this.$store.dispatch("fm/selectDisk", {
disk, disk,
manager: this.manager, manager: this.manager,
}); });
...@@ -54,14 +70,13 @@ export default { ...@@ -54,14 +70,13 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.fm-disk-list { .fm-disk-list {
ul.list-inline {
margin-bottom: 0.5rem;
}
ul.list-inline { .badge.badge-light {
margin-bottom: 0.5rem; cursor: pointer;
} }
}
.badge.badge-light {
cursor: pointer;
}
}
</style> </style>
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