mirror of
https://github.com/TrentSPalmer/flask_photo_scaling_app.git
synced 2025-02-18 13:40:55 -08:00
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from flask import current_app
|
|
from flask_login import current_user
|
|
from flask import (
|
|
Blueprint, render_template, redirect, url_for, flash, request, abort
|
|
)
|
|
from app.forms import UploadPhotoForm
|
|
from .scripts.process_uploaded_photo import process_uploaded_photo
|
|
from werkzeug.utils import secure_filename
|
|
|
|
pupload = Blueprint(
|
|
"pupload", __name__, template_folder="templates"
|
|
)
|
|
|
|
|
|
@pupload.route('/photo-upload', methods=['GET', 'POST'])
|
|
def photo_upload():
|
|
if not current_user.is_authenticated:
|
|
return(redirect(url_for('proute.index')))
|
|
form = UploadPhotoForm()
|
|
if request.method == 'POST' and form.validate_on_submit():
|
|
f = request.files['image']
|
|
filename = secure_filename(f.filename)
|
|
if filename != '':
|
|
import os
|
|
file_ext = os.path.splitext(filename)[1]
|
|
fe = file_ext
|
|
if fe not in ['.jpg', '.png'] or fe != validate_image(f.stream):
|
|
abort(400)
|
|
f.save(
|
|
os.path.join(
|
|
current_app.config['PHOTO_SAVE_PATH'],
|
|
'raw_' + filename,
|
|
),
|
|
)
|
|
photo_id = process_uploaded_photo(
|
|
filename,
|
|
current_user,
|
|
current_app.config,
|
|
)
|
|
print(photo_id)
|
|
flash("Thanks for the new photo!")
|
|
return(redirect(url_for('p_route.photo', photo_id=photo_id)))
|
|
return(redirect(url_for('proute.index')))
|
|
return render_template('upload.html', title="Photo Upload", form=form)
|
|
|
|
|
|
def validate_image(stream):
|
|
import imghdr
|
|
header = stream.read(512)
|
|
stream.seek(0)
|
|
format = imghdr.what(None, header)
|
|
if not format:
|
|
return None
|
|
return '.' + (format if format != 'jpeg' else 'jpg')
|