yee.. upload progress works

This commit is contained in:
2018-02-08 21:05:55 +02:00
parent f907a88d21
commit c18b69534c
4 changed files with 71 additions and 11 deletions

View File

@@ -87,13 +87,10 @@ def upload(name = None, password = None):
return "Overwrite forbidden", 403
file.save(filename)
set_rights(filename)
response = current_app.response_class(
response="File uploaded",
status=307,
mimetype="text/plain"
)
response.headers["Location"] = url_for('list_view',name=name)
return response
if 'from_gui' in request.form:
if request.form['from_gui'] == "true":
return redirect(url_for('list_view',name=name))
return "File uploaded\n", 200
else:
return "Use the 'file' variable to upload",400

View File

@@ -113,3 +113,14 @@ tr:nth-child(even) {
margin-left: 2em;
font-size: medium;
}
#progress {
margin: 4px 4px 4px 4px;
}
#progress.success {
color: green;
}
#progress.failure {
color: red;
}

View File

@@ -10,3 +10,53 @@ function index_form_enter(event) {
function index_form_submit() {
window.location = window.location + "/list/" + document.getElementById("index_form_name").value;
}
function UploadFile(file) {
var xhr = new XMLHttpRequest();
if (xhr.upload) {
var o = document.getElementById("progress");
xhr.upload.addEventListener("progress", function(e) {
var pc = parseInt((e.loaded / e.total * 100));
o.innerHTML = "Uploading: " + pc + "%";
}, false);
// file received/failed
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
progress.className = (xhr.status == 200 ? "success" : "failure");
if (xhr.status == 200) {
location = location;
} else {
o.innerHTML = xhr.response;
}
}
};
// start upload
xhr.open("POST", document.getElementById("upload_form").action, true);
xhr.setRequestHeader("X-FILENAME", file.name);
var formData = new FormData();
formData.append('name', document.getElementById("list_upload_name").value);
formData.append('file', file);
xhr.send(formData);
}
}
// file selection
function FileSelectHandler(e) {
// fetch FileList object
var files = e.target.files || e.dataTransfer.files;
// process all File objects
for (var i = 0, f; f = files[i]; i++) {
UploadFile(f);
}
}

View File

@@ -3,10 +3,12 @@
<div id=list_menu>
{% if upload %}
<div id=list_upload>
<form action={{ url_for('upload') }} method=post enctype=multipart/form-data>
<input type=hidden name=name value="{{ name|safe }}" />
<input id="list_upload_select" type=file name=file onchange="document.getElementById('list_upload_button').disabled = false;"><br>
<input id="list_upload_button" type=submit value=Upload disabled>
<form id="upload_form" action={{ url_for('upload') }} method=post enctype=multipart/form-data>
<input id="list_upload_name" type=hidden name=name value="{{ name|safe }}" />
<input type=hidden name=from_gui value="true" />
<input id="list_upload_select" type=file name=file onchange="FileSelectHandler(event)"><br>
<!--input id="list_upload_button" type=submit value=Upload disabled-->
<div id="progress"></div>
</form>
</div>
{% else %}