Solution
import os
from flask import Flask
from flask import render_template, request, send_from_directory
from flask_sqlalchemy import SQLAlchemy
from flask_file_upload.file_upload import FileUpload
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = os.path.join(app.root_path, 'media')
app.config['ALLOWED_EXTENSIONS'] = ['jpg', 'png']
app.config['MAX_CONTENT_LENGTH'] = 1000 * 1024 * 1024 # 1000mb
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
file_upload = FileUpload(app, db)
@file_upload.Model
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
image = file_upload.Column()
@property
def image_url(self):
return f'{self.__tablename__}/{self.id}/{self.image__file_name}'
with app.app_context():
db.drop_all()
db.create_all()
@app.route('/create', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
my_img = request.files['my-img']
post = Post()
file_upload.save_files(post, files={ 'image': my_img })
db.session.add(post)
db.session.commit()
posts = Post.query.all()
return render_template('create.html', **locals())
@app.route('/media/')
def media(filename):
return send_from_directory(
app.config['UPLOAD_FOLDER'],
filename,
as_attachment=True
)
{% for post in posts %}
{% endfor %}