upload image for a blog post with flask-sqlalchemy

Viewed 20

I'm trying to create a form to enable users to add blog posts with images using flask and I saved the name of the picture in the database using SQLAlchemy like this "<FileStorage: 'IMG_20210415_114702.jpg' ('image/jpeg')>" as the name of the picture instead of this 'IMG_20210415_114702.jpg'. Please how do I correct this?

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255))
    content = db.Column(db.Text)
    author = db.Column(db.String(255))
    date_posted = db.Column(db.DateTime, default=datetime.utcnow)
    slug = db.Column(db.String(255))
    poster_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    post_pic = db.Column(db.String(200), nullable=True)
@app.route("/add-post", methods=["GET", "POST"])
#@login_required
def add_post():
    form = PostForm()

    if form.validate_on_submit():
        poster = current_user.id
        post = Post(title=form.title.data, content=form.content.data, poster_id=poster, slug=form.slug.data, post_pic=form.post_pic.data)
        form.title.data = ''
        form.content.data = ''
        #form.author.data = ''
        form.slug.data = ''
        name = ''

        form.post_pic.data = request.files['post_pic']
        name = form.post_pic.data.filename
        filepath = os.path.join(app.config['UPLOAD_FOLDER'], name)
        form.post_pic.data.save(filepath)

        #postpic_filename = secure_filename(form.post_pic.data.filename)
        #postpic_name = str(uuid.uuid1()) + "_" + postpic_filename
        #saver = request.files['post_pic']
        #form.post_pic.data = postpic_name

        db.session.add(post)
        db.session.commit()

        #saver.save(os.path.join(app.config['UPLOAD_FOLDER'], postpic_name))

        flash("post submitted successfully!")

    return render_template("add_post.html", form=form)
0 Answers
Related