Working single file upload

This commit is contained in:
2025-11-02 11:26:19 -05:00
parent d406574707
commit d332aca22e
7 changed files with 75 additions and 21 deletions

View File

@@ -7,6 +7,13 @@
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" type="text/css" href="../static/style.css">
<script src="../static/script.js"></script>
<script>
function prepUpload() {
uploadFiles('submit', 'fileToUpload', 'progressContainer', 'progress', '/upload/photo', {
'name': document.getElementById('buttonName').value
})
}
</script>
</head>
<body>
<div class="container">
@@ -15,7 +22,11 @@
<div class="alert alert-info text-center" role="alert">
Upload a single static photo, single photos are good if you want something that doesn't distract during services.
</div>
<form method="POST" enctype="multipart/form-data" action="/upload/photo">
<form>
<div id="progressContainer" class="progress" role="progressbar", aria-label="Upload Progress" aria-valuemin="0"
aria-valuemin="0", aria-valuemax="100" >
<div id="progress" class="progress-bar" style="width: 0%;">0%</div>
</div>
<div class="form-group">
<label for="fileToUpload">File to Upload</label>
<input type="file" class="form-control" name="file" id="fileToUpload" />
@@ -24,7 +35,7 @@
<label for="buttonName">Button Name</label>
<input type="text" class="form-control" name="buttonName" id="buttonName" />
</div>
<button type="submit" class="btn btn-primary form-control">Submit</button>
<button id="submit" class="btn btn-primary form-control" onclick="prepUpload()">Submit</button>
</form>
</div>
</body>

View File

@@ -1,11 +1,40 @@
from flask import Blueprint, request, render_template
from flask import Blueprint, request, render_template, jsonify, current_app
from werkzeug.utils import secure_filename
import os
upload_photo_bp = Blueprint('upload_photo', __name__, url_prefix='/upload', template_folder='.')
@upload_photo_bp.route('/photo')
@upload_photo_bp.route('/photo', methods=['GET', 'POST'])
def get_page():
if request.method == "GET":
return render_get(), 200
elif request.method == "POST":
return upload()
def render_get():
return render_template('upload_photo.html')
return render_template('upload_photo.html')
def upload():
if not request.files['files[]']:
return jsonify({
'status': 'FAILED',
'error': '/upload/photo requires 1 photo'
}), 400
# TODO Button name data exists
# TODO Button name already exists validation
# TODO File input validation
print(request.files['files[]'])
file = request.files['files[]']
if file:
folder_path = os.path.join(current_app.config["config"]["upload_location"], request.form["name"])
if not os.path.exists(folder_path):
os.makedirs(folder_path)
filename = secure_filename(file.filename)
file.save(os.path.join(folder_path, filename))
return jsonify({
'status': 'SUCCESS'
}), 200