Completed file uploading. Need to fix listing when right clicking. Unzip is shown at all times. Added unzip function to helpers and is called through ajax for unzipping files to current directory.

This commit is contained in:
Andrew 2021-08-19 23:36:25 -04:00
parent 90d59faf5b
commit e08df4d369
4 changed files with 71 additions and 41 deletions

View File

@ -286,7 +286,10 @@ class Controller:
tempDir = tempfile.mkdtemp()
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(tempDir)
test = zip_ref.filelist[1].filename
for i in range(len(zip_ref.filelist)):
if len(zip_ref.filelist) > 1 or not zip_ref.filelist[i].filename.endswith('/'):
test = zip_ref.filelist[i].filename
break
path_list = test.split('/')
root_path = path_list[0]
if len(path_list) > 1:

View File

@ -268,15 +268,16 @@ class Helpers:
else:
new_dir += '/'+new_dir_list[i]
if helper.check_file_perms(zip_path):
if helper.check_file_perms(zip_path) and os.path.isfile(zip_path):
helper.ensure_dir_exists(new_dir)
tempDir = tempfile.mkdtemp()
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(tempDir)
for item in os.listdir(tempDir):
print(item)
test = zip_ref.filelist[1].filename
print(test)
try:
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(tempDir)
for i in range(len(zip_ref.filelist)):
if len(zip_ref.filelist) > 1 or not zip_ref.filelist[i].filename.endswith('/'):
test = zip_ref.filelist[i].filename
break
path_list = test.split('/')
root_path = path_list[0]
if len(path_list) > 1:
@ -290,8 +291,11 @@ class Helpers:
shutil.move(os.path.join(full_root_path, item), os.path.join(new_dir, item))
except Exception as ex:
logger.error('ERROR IN ZIP IMPORT: {}'.format(ex))
except Exception as ex:
print(ex)
else:
return "false"
return
def ensure_logging_setup(self):
log_file = os.path.join(os.path.curdir, 'logs', 'commander.log')

View File

@ -189,32 +189,34 @@ class AjaxHandler(BaseHandler):
# Create the directory
os.mkdir(dir_path)
elif page == "unzip_file":
server_id = self.get_argument('id', None)
path = self.get_argument('path', None)
helper.unzipFile(path)
self.render_page("/panel/server_detail?id={}&subpage=files".format(server_id))
return
elif page == "upload_files":
server_id = self.get_argument('id', None)
path = self.get_argument('path', None)
unzip = self.get_argument('unzip', None)
if helper.in_path(db_helper.get_server_data_by_id(server_id)['path'], path):
try:
files = self.request.files['files']
for file in files:
if file['filename'].split('.') is not None:
self._upload_file(file['body'], path, file['filename'], unzip)
self._upload_file(file['body'], path, file['filename'])
else:
logger.error("Directory Detected. Skipping")
self.redirect("/panel/server_detail?id={}&subpage=files".format(server_id))
except Exception as e:
print(e)
self.redirect("/panel/server_detail?id={}&subpage=files".format(server_id))
else:
logger.error("Invalid directory requested. Canceling upload")
return
elif page == 'unzip_file':
print("in unzip file")
path = self.get_argument('path', None)
helper.unzipFile(path)
def _upload_file(self, file_data, file_path, file_name, unzip):
def _upload_file(self, file_data, file_path, file_name):
error = ""
file_full_path = os.path.join(file_path, file_name)
@ -231,17 +233,6 @@ class AjaxHandler(BaseHandler):
output_file = open(file_full_path, 'wb')
output_file.write(file_data)
logger.info('Saving File: {}'.format(file_full_path))
uploading = True
while uploading:
try:
new_output = open(file_full_path, 'wb')
new_output.close()
uploading = False
except:
print("file is still uploading")
if unzip == "True":
helper.unzipFile(file_full_path)
print("DONE")
return True
@tornado.web.authenticated

View File

@ -531,27 +531,59 @@
path: path
},
});
location.href="/
}
function uploadFilesE(event){
path = event.target.parentElement.getAttribute('data-path');
console.log("PATH: " + path);
$(function () {
server_id = {{ data['server_stats']['server_id']['server_id'] }};
var uploadHtml = "<div>" +
'<form id="upload_file" enctype="multipart/form-data" action="/ajax/upload_files?id=' + server_id +'&path='+ path +'"method="post">{% raw xsrf_form_html() %}'+"<label class='upload-area' style='width:100%;text-align:center;' for='files'>" +
"<input id='files' name='files' type='file' style='display:none;' multiple='true'>" +
"<i class='fa fa-cloud-upload fa-3x'></i>" +
"<br />" +
"Click Here To Upload" +
"</label></form>" +
"<br />" +
"<ul style='margin-left:5px !important;' id='fileList'></ul>" +
"</div><div class='clearfix'></div>";
bootbox.dialog({
message: uploadHtml,
title: "File Upload",
buttons: {
success: {
label: "Upload",
className: "btn-default",
callback: function () {
$('#upload_file').submit(); //.trigger('submit');
}
}
}
});
var fileList = document.getElementById("files");
fileList.addEventListener("change", function (e) {
var list = "";
for (var i = 0; i < this.files.length; i++) {
list += "<li class='col-xs-12 file-list'>" + this.files[i].name + "</li>"
}
document.getElementById("fileList").innerHTML = list;
}, false);
});
}
function uploadFilesE(e){
function uploadFiles(e){
path = event.target.parentElement.getAttribute('data-path');
server_id = {{ data['server_stats']['server_id']['server_id'] }};
var uploadHtml = '<form enctype="multipart/form-data" action="/ajax/upload_files?id=' + server_id +'&path='+ path +'"method="post">{% raw xsrf_form_html() %}<div class="form-group"><label for="files">Upload A File Here</label><input id="files" type="file" name="files" class="form-control-file" multiple></div><input id="unzip" type = checkbox value="1" checked> Would you like us Unzip directories? </input><br><br><input id="upload_file" type="submit"value="Upload File" class="btn btn-success hidden"/></form>';
var uploadHtml = '<form enctype="multipart/form-data" action="/ajax/upload_files?id=' + server_id +'&path='+ path +'"method="post">{% raw xsrf_form_html() %}<div class="form-group">'+"<label class='upload-area' style='width:100%;text-align:center;' for='fupload'>" +'<input id="files" type="file" name="files" multiple>' +"<i class='fa fa-cloud-upload fa-3x'></i>" +"<br />" +"Upload Files Here" +"</label>" +"<br />" +"<span style='margin-left:5px !important;' id='fileList'></span>"+'</div><br><br><input id="upload_file" type="submit"value="Upload File" class="btn btn-success hidden"/></form>';
bootbox.dialog({
message: uploadHtml,
title: "Upload Files To "+path,
});
var fileList = document.getElementById("upload");
fileList.addEventListener("change", function (e) {
var list = "";
for (var i = 0; i < this.files.length; i++) {
list += "<div class='col-xs-12 file-list'>"+this.files[i].name+"</div>";
}
$("#fileList").text(list);
}, false);
}
function getTreeView() {