diff --git a/src/web/templates/index.html b/src/web/templates/index.html
index 1963727b..751d4052 100644
--- a/src/web/templates/index.html
+++ b/src/web/templates/index.html
@@ -172,7 +172,7 @@
Supported file types: {{valid_file_suffix}}
+
+
diff --git a/src/web/web.py b/src/web/web.py
index 7f6b6c65..c7b7af5a 100644
--- a/src/web/web.py
+++ b/src/web/web.py
@@ -483,31 +483,30 @@ def download_img():
return redirect(url_for("index"))
-@app.route("/files/upload", methods=["POST"])
-def upload_file():
- if 'file' not in request.files:
- flash("No file part in request.", "error")
- return redirect(url_for("index"))
- f = request.files["file"]
- if f.filename == "":
- flash("No file selected.", "error")
+@app.route("/files/upload/", methods=["POST"])
+def upload_file(filename):
+ if not filename:
+ flash("No file provided.", "error")
return redirect(url_for("index"))
- from werkzeug.utils import secure_filename
from os import path
- filename = secure_filename(f.filename)
- filepath = path.join(app.config["UPLOAD_FOLDER"], filename)
- if path.isfile(filepath):
+ from werkzeug.utils import secure_filename
+ file_path = path.join(app.config["UPLOAD_FOLDER"], secure_filename(filename))
+ if path.isfile(file_path):
flash(f"{filename} already exists.", "error")
return redirect(url_for("index"))
- else:
- try:
- f.save(filepath)
- flash(f"File {filename} successfully uploaded to {base_dir} !")
- return redirect(url_for("index"))
- except:
- flash(f"Failed to upload {filename} !")
- return redirect(url_for("index"))
+
+ from io import DEFAULT_BUFFER_SIZE
+ binary_new_file = "bx"
+ with open(file_path, binary_new_file, buffering=DEFAULT_BUFFER_SIZE) as f:
+ chunk_size = DEFAULT_BUFFER_SIZE
+ while True:
+ chunk = request.stream.read(chunk_size)
+ if len(chunk) == 0:
+ break
+ f.write(chunk)
+ # TODO: display an informative success message
+ return redirect(url_for("index", filename=filename))
@app.route("/files/create", methods=["POST"])