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/') def media_file(filename): from flask import send_from_directory return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename)