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 @@
-
+ @@ -181,6 +181,13 @@

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"])