42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
import os
|
|
import uuid
|
|
from flask import Blueprint, render_template, redirect, url_for, request, current_app, flash
|
|
from flask_login import login_required
|
|
from werkzeug.utils import secure_filename
|
|
from app import db
|
|
from .models import Media
|
|
from .forms import MediaUploadForm
|
|
|
|
bp = Blueprint('media', __name__, template_folder='templates')
|
|
|
|
@bp.route('/media/upload', methods=['GET', 'POST'])
|
|
@login_required
|
|
def upload_media():
|
|
form = MediaUploadForm()
|
|
if form.validate_on_submit():
|
|
file = form.image.data
|
|
filename = f"{uuid.uuid4().hex}_{secure_filename(file.filename)}"
|
|
upload_path = os.path.join(current_app.config['UPLOAD_FOLDER'], filename)
|
|
file.save(upload_path)
|
|
media = Media(
|
|
file_url=filename,
|
|
caption=form.caption.data,
|
|
plant_id=form.plant_id.data or None,
|
|
growlog_id=form.growlog_id.data or None
|
|
)
|
|
db.session.add(media)
|
|
db.session.commit()
|
|
flash("Image uploaded successfully.", "success")
|
|
return redirect(url_for('media.upload_media'))
|
|
return render_template('media/upload.html', form=form)
|
|
|
|
@bp.route('/media')
|
|
@login_required
|
|
def list_media():
|
|
images = Media.query.order_by(Media.uploaded_at.desc()).all()
|
|
return render_template('media/list.html', images=images)
|
|
|
|
@bp.route('/media/files/<filename>')
|
|
def media_file(filename):
|
|
from flask import send_from_directory
|
|
return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename) |